All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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.