From: Aurelien Jarno <aurelien@aurel32.net>
To: qemu-devel@nongnu.org
Cc: "Kirill A. Shutemov" <kirill@shutemov.name>
Subject: Re: [Qemu-devel] [PATCH] Fix getdents* syscalls
Date: Mon, 13 Oct 2008 23:09:12 +0200 [thread overview]
Message-ID: <20081013210912.GE18008@volta.aurel32.net> (raw)
In-Reply-To: <1223492074-5677-2-git-send-email-kirill@shutemov.name>
Applied, thanks.
On Wed, Oct 08, 2008 at 09:54:26PM +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 <kirill@shutemov.name>
> ---
> 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
`. `' aurel32@debian.org | aurelien@aurel32.net
`- people.debian.org/~aurel32 | www.aurel32.net
next prev parent reply other threads:[~2008-10-13 21:09 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-08 18:54 [Qemu-devel] [PATCH] Add readahead syscall Kirill A. Shutemov
2008-10-08 18:54 ` [Qemu-devel] [PATCH] Fix getdents* syscalls Kirill A. Shutemov
2008-10-08 18:54 ` [Qemu-devel] [PATCH] Fix and cleanup IPCOP_msg* ipc calls handling Kirill A. Shutemov
2008-10-08 18:54 ` [Qemu-devel] [PATCH] Implement msg* syscalls Kirill A. Shutemov
2008-10-08 18:54 ` [Qemu-devel] [PATCH] Fix and cleanup IPCOP_sem* ipc calls handling Kirill A. Shutemov
2008-10-08 18:54 ` [Qemu-devel] [PATCH] Implement sem* syscalls Kirill A. Shutemov
2008-10-08 18:54 ` [Qemu-devel] [PATCH] Fix and cleanup IPCOP_shm* ipc calls handling Kirill A. Shutemov
2008-10-08 18:54 ` [Qemu-devel] [PATCH] Implement shm* syscalls Kirill A. Shutemov
2008-10-08 18:54 ` [Qemu-devel] [PATCH] Fix fstatat64()/newfstatat() syscall implementation Kirill A. Shutemov
2008-10-08 18:54 ` [Qemu-devel] [PATCH] Introduce --enable-binfmt-misc configure option Kirill A. Shutemov
2008-10-09 17:40 ` [Qemu-devel] [PATCH, v2] Fix fstatat64()/newfstatat() syscall implementation Kirill A. Shutemov
2008-10-09 17:42 ` [Qemu-devel] [PATCH, v2] Implement sem* syscalls Kirill A. Shutemov
2008-10-09 17:41 ` [Qemu-devel] [PATCH, v2] Fix and cleanup IPCOP_sem* ipc calls handling Kirill A. Shutemov
2008-10-13 21:09 ` Aurelien Jarno [this message]
2008-10-13 21:09 ` [Qemu-devel] [PATCH] Add readahead syscall Aurelien Jarno
-- strict thread matches above, loose matches on Subject: below --
2008-10-13 10:10 Kirill A. Shutemov
2008-10-13 10:10 ` [Qemu-devel] [PATCH] Fix getdents* syscalls Kirill A. Shutemov
2008-10-13 12:48 ` Aurelien Jarno
2008-10-13 12:59 ` Kirill A. Shutemov
2008-10-13 13:10 ` Aurelien Jarno
2008-10-01 13:56 [Qemu-devel] [PATCH] Add fadvise64 stubs Kirill A. Shutemov
2008-10-01 13:56 ` [Qemu-devel] [PATCH] Add mincore syscall Kirill A. Shutemov
2008-10-01 13:56 ` [Qemu-devel] [PATCH] Add readahead syscall Kirill A. Shutemov
2008-10-01 13:56 ` [Qemu-devel] [PATCH] Add inotify syscall family Kirill A. Shutemov
2008-10-01 13:56 ` [Qemu-devel] [PATCH] Fix getdents* syscalls Kirill A. Shutemov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20081013210912.GE18008@volta.aurel32.net \
--to=aurelien@aurel32.net \
--cc=kirill@shutemov.name \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.