[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] Fix getdents* syscalls
From: |
Aurelien Jarno |
Subject: |
Re: [Qemu-devel] [PATCH] Fix getdents* syscalls |
Date: |
Mon, 13 Oct 2008 14:48:25 +0200 |
User-agent: |
Mutt/1.5.13 (2006-08-11) |
Are you usingi cron to send those patches?
More seriously this is the third time you send the patch series in two
weeks. We do *not* have any *explanations*, so we don't know if it is a
new version or only a resend. I have some of your patches in my local
tree and I don't feel checking once more if the patches are the same or
not. Too bad if we miss some important changes.
I agree we are not merging patch very fast, but please be patient.
Resending patches too often and without giving any details only annoys
people and won't help to get your patches applied earlier.
Ping (for a big series) or resend (with the appropriate tag in the
subject) are welcome if we forget a patch. But please be patient.
On Mon, Oct 13, 2008 at 01:10:29PM +0300, Kirill A. Shutemov wrote:
> glibc's structs dirent and dirent64 is different from in-kernel dirent
> and dirent64. Kernel headers doesn't provide structs dirent(64) any
> more. So we should add it to qemu headers.
>
> To avoid conflict with glibc it called struct linux_dirent(64).
>
> Signed-off-by: Kirill A. Shutemov <address@hidden>
> ---
> linux-user/syscall.c | 27 +++++++++++++--------------
> linux-user/syscall_defs.h | 15 +++++++++++++++
> 2 files changed, 28 insertions(+), 14 deletions(-)
>
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index dc7e561..40e985a 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -28,7 +28,6 @@
> #include <fcntl.h>
> #include <time.h>
> #include <limits.h>
> -#include <dirent.h>
> #include <sys/types.h>
> #include <sys/ipc.h>
> #include <sys/msg.h>
> @@ -94,8 +93,8 @@
> #endif
>
> //#include <linux/msdos_fs.h>
> -#define VFAT_IOCTL_READDIR_BOTH _IOR('r', 1, struct dirent [2])
> -#define VFAT_IOCTL_READDIR_SHORT _IOR('r', 2, struct dirent [2])
> +#define VFAT_IOCTL_READDIR_BOTH _IOR('r', 1, struct
> linux_dirent [2])
> +#define VFAT_IOCTL_READDIR_SHORT _IOR('r', 2, struct
> linux_dirent [2])
>
>
> #undef _syscall0
> @@ -216,10 +215,10 @@ _syscall3(int,sys_futimesat,int,dirfd,const char
> *,pathname,
> #endif
> _syscall2(int,sys_getcwd1,char *,buf,size_t,size)
> #if TARGET_ABI_BITS == 32
> -_syscall3(int, sys_getdents, uint, fd, struct dirent *, dirp, uint, count);
> +_syscall3(int, sys_getdents, uint, fd, struct linux_dirent *, dirp, uint,
> count);
> #endif
> #if defined(TARGET_NR_getdents64) && defined(__NR_getdents64)
> -_syscall3(int, sys_getdents64, uint, fd, struct dirent64 *, dirp, uint,
> count);
> +_syscall3(int, sys_getdents64, uint, fd, struct linux_dirent64 *, dirp,
> uint, count);
> #endif
> _syscall2(int, sys_getpriority, int, which, int, who);
> #if !defined (__x86_64__)
> @@ -4879,7 +4878,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long
> arg1,
> #elif TARGET_ABI_BITS == 32 && HOST_LONG_BITS == 64
> {
> struct target_dirent *target_dirp;
> - struct dirent *dirp;
> + struct linux_dirent *dirp;
> abi_long count = arg3;
>
> dirp = malloc(count);
> @@ -4890,7 +4889,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long
> arg1,
>
> ret = get_errno(sys_getdents(arg1, dirp, count));
> if (!is_error(ret)) {
> - struct dirent *de;
> + struct linux_dirent *de;
> struct target_dirent *tde;
> int len = ret;
> int reclen, treclen;
> @@ -4912,7 +4911,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long
> arg1,
> tnamelen = 256;
> /* XXX: may not be correct */
> strncpy(tde->d_name, de->d_name, tnamelen);
> - de = (struct dirent *)((char *)de + reclen);
> + de = (struct linux_dirent *)((char *)de + reclen);
> len -= reclen;
> tde = (struct target_dirent *)((char *)tde + treclen);
> count1 += treclen;
> @@ -4924,14 +4923,14 @@ abi_long do_syscall(void *cpu_env, int num, abi_long
> arg1,
> }
> #else
> {
> - struct dirent *dirp;
> + struct linux_dirent *dirp;
> abi_long count = arg3;
>
> if (!(dirp = lock_user(VERIFY_WRITE, arg2, count, 0)))
> goto efault;
> ret = get_errno(sys_getdents(arg1, dirp, count));
> if (!is_error(ret)) {
> - struct dirent *de;
> + struct linux_dirent *de;
> int len = ret;
> int reclen;
> de = dirp;
> @@ -4942,7 +4941,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long
> arg1,
> de->d_reclen = tswap16(reclen);
> tswapls(&de->d_ino);
> tswapls(&de->d_off);
> - de = (struct dirent *)((char *)de + reclen);
> + de = (struct linux_dirent *)((char *)de + reclen);
> len -= reclen;
> }
> }
> @@ -4953,13 +4952,13 @@ abi_long do_syscall(void *cpu_env, int num, abi_long
> arg1,
> #if defined(TARGET_NR_getdents64) && defined(__NR_getdents64)
> case TARGET_NR_getdents64:
> {
> - struct dirent64 *dirp;
> + struct linux_dirent64 *dirp;
> abi_long count = arg3;
> if (!(dirp = lock_user(VERIFY_WRITE, arg2, count, 0)))
> goto efault;
> ret = get_errno(sys_getdents64(arg1, dirp, count));
> if (!is_error(ret)) {
> - struct dirent64 *de;
> + struct linux_dirent64 *de;
> int len = ret;
> int reclen;
> de = dirp;
> @@ -4970,7 +4969,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long
> arg1,
> de->d_reclen = tswap16(reclen);
> tswap64s((uint64_t *)&de->d_ino);
> tswap64s((uint64_t *)&de->d_off);
> - de = (struct dirent64 *)((char *)de + reclen);
> + de = (struct linux_dirent64 *)((char *)de + reclen);
> len -= reclen;
> }
> }
> diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
> index c30bb15..5a58010 100644
> --- a/linux-user/syscall_defs.h
> +++ b/linux-user/syscall_defs.h
> @@ -1963,6 +1963,21 @@ struct target_sysinfo {
> char _f[20-2*sizeof(abi_long)-sizeof(int)]; /* Padding: libc5 uses
> this.. */
> };
>
> +struct linux_dirent {
> + long d_ino;
> + unsigned long d_off;
> + unsigned short d_reclen;
> + char d_name[256]; /* We must not include limits.h! */
> +};
> +
> +struct linux_dirent64 {
> + uint64_t d_ino;
> + int64_t d_off;
> + unsigned short d_reclen;
> + unsigned char d_type;
> + char d_name[256];
> +};
> +
> #include "socket.h"
>
> #include "errno_defs.h"
> --
> 1.5.6.5.GIT
>
>
>
>
--
.''`. Aurelien Jarno | GPG: 1024D/F1BCDB73
: :' : Debian developer | Electrical Engineer
`. `' address@hidden | address@hidden
`- people.debian.org/~aurel32 | www.aurel32.net
- Re: [Qemu-devel] [PATCH] Implement shm* syscalls + Implement sem* syscalls, (continued)
- [Qemu-devel] Re: [PATCH] Fix and cleanup IPCOP_sem* ipc calls handling, Kirill A. Shutemov, 2008/10/24
- Re: [Qemu-devel] [PATCH] Implement msg* syscalls, Aurelien Jarno, 2008/10/13
- Re: [Qemu-devel] [PATCH] Fix and cleanup IPCOP_msg* ipc calls handling, Aurelien Jarno, 2008/10/13
- Re: [Qemu-devel] [PATCH] Fix and cleanup IPCOP_msg* ipc calls handling, Kirill A. Shutemov, 2008/10/13
- Re: [Qemu-devel] [PATCH] Fix and cleanup IPCOP_msg* ipc calls handling, Aurelien Jarno, 2008/10/13
- Re: [Qemu-devel] [PATCH] Fix and cleanup IPCOP_msg* ipc calls handling, Aurelien Jarno, 2008/10/13
- Re: [Qemu-devel] [PATCH] Fix getdents* syscalls,
Aurelien Jarno <=
- Re: [Qemu-devel] [PATCH] Fix getdents* syscalls, Kirill A. Shutemov, 2008/10/13
- Re: [Qemu-devel] [PATCH] Fix getdents* syscalls, Aurelien Jarno, 2008/10/13