Messages in this thread | | | Date | Tue, 1 Jul 2008 14:22:48 +0300 | From | Adrian Bunk <> | Subject | Re: [PATCH 2/7] fat: Fix VFAT_IOCTL_READDIR_xxx and cleanup for userland |
| |
On Tue, Jul 01, 2008 at 03:40:33AM -0400, Christoph Hellwig wrote: > On Tue, Jul 01, 2008 at 11:57:03AM +0900, OGAWA Hirofumi wrote: > > > > "struct dirent" is a kernel type here, but is a **different type** in > > userspace! This means both the structure and the IOCTL number is wrong! > > > > So, this adds new "struct __fat_dirent" to generate correct IOCTL > > number. And kernel stuff moves to under __KERNEL__. > > Given that the current version can't actually work without defininig > it's own dirent and thus ioctl number symbolic name I wonder if these > ioctls are used at all? They must have been completely untested for > a while, and I suspect we'd be better off just removing them.
I had the same thought, but when checking this I noticed that at least wine works around this problem:
<-- snip -->
/* just in case... */ #undef VFAT_IOCTL_READDIR_BOTH #undef USE_GETDENTS
#ifdef linux
/* We want the real kernel dirent structure, not the libc one */ typedef struct { long d_ino; long d_off; unsigned short d_reclen; char d_name[256]; } KERNEL_DIRENT;
/* Define the VFAT ioctl to get both short and long file names */ #define VFAT_IOCTL_READDIR_BOTH _IOR('r', 1, KERNEL_DIRENT [2] )
<-- snip -->
cu Adrian
--
"Is there not promise of rain?" Ling Tan asked suddenly out of the darkness. There had been need of rain for many days. "Only a promise," Lao Er said. Pearl S. Buck - Dragon Seed
| |