|
@@ -161,60 +161,6 @@ out:
|
|
return error;
|
|
return error;
|
|
}
|
|
}
|
|
|
|
|
|
-struct dirent32 {
|
|
|
|
- unsigned int d_ino;
|
|
|
|
- unsigned int d_off;
|
|
|
|
- unsigned short d_reclen;
|
|
|
|
- char d_name[NAME_MAX + 1];
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-static void
|
|
|
|
-xlate_dirent(void *dirent64, void *dirent32, long n)
|
|
|
|
-{
|
|
|
|
- long off;
|
|
|
|
- struct dirent *dirp;
|
|
|
|
- struct dirent32 *dirp32;
|
|
|
|
-
|
|
|
|
- off = 0;
|
|
|
|
- while (off < n) {
|
|
|
|
- dirp = (struct dirent *)(dirent64 + off);
|
|
|
|
- dirp32 = (struct dirent32 *)(dirent32 + off);
|
|
|
|
- off += dirp->d_reclen;
|
|
|
|
- dirp32->d_ino = dirp->d_ino;
|
|
|
|
- dirp32->d_off = (unsigned int)dirp->d_off;
|
|
|
|
- dirp32->d_reclen = dirp->d_reclen;
|
|
|
|
- strncpy(dirp32->d_name, dirp->d_name, dirp->d_reclen - ((3 * 4) + 2));
|
|
|
|
- }
|
|
|
|
- return;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-asmlinkage long
|
|
|
|
-sys32_getdents(unsigned int fd, void * dirent32, unsigned int count)
|
|
|
|
-{
|
|
|
|
- long n;
|
|
|
|
- void *dirent64;
|
|
|
|
-
|
|
|
|
- dirent64 = (void *)((unsigned long)(dirent32 + (sizeof(long) - 1)) & ~(sizeof(long) - 1));
|
|
|
|
- if ((n = sys_getdents(fd, dirent64, count - (dirent64 - dirent32))) < 0)
|
|
|
|
- return(n);
|
|
|
|
- xlate_dirent(dirent64, dirent32, n);
|
|
|
|
- return(n);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-asmlinkage int old_readdir(unsigned int fd, void * dirent, unsigned int count);
|
|
|
|
-
|
|
|
|
-asmlinkage int
|
|
|
|
-sys32_readdir(unsigned int fd, void * dirent32, unsigned int count)
|
|
|
|
-{
|
|
|
|
- int n;
|
|
|
|
- struct dirent dirent64;
|
|
|
|
-
|
|
|
|
- if ((n = old_readdir(fd, &dirent64, count)) < 0)
|
|
|
|
- return(n);
|
|
|
|
- xlate_dirent(&dirent64, dirent32, dirent64.d_reclen);
|
|
|
|
- return(n);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
asmlinkage int
|
|
asmlinkage int
|
|
sys32_waitpid(compat_pid_t pid, unsigned int *stat_addr, int options)
|
|
sys32_waitpid(compat_pid_t pid, unsigned int *stat_addr, int options)
|
|
{
|
|
{
|