From 96b91643c34a145a2e565247ca7594c1f77fb011 Mon Sep 17 00:00:00 2001 From: Manuel Novoa III Date: Mon, 25 Jun 2001 20:26:29 +0000 Subject: Remove simulated d_type support for getdents and the dirent struct, and use the straight getdents syscall instead of the wrapper (which leaked memory). --- libc/misc/dirent/readdir.c | 12 +----------- libc/sysdeps/linux/common/Makefile | 4 ++-- libc/sysdeps/linux/common/str_syscalls.sh | 2 +- libc/sysdeps/linux/common/syscalls.c | 5 ++--- libc/sysdeps/linux/i386/bits/dirent.h | 13 +++++++++++-- 5 files changed, 17 insertions(+), 19 deletions(-) diff --git a/libc/misc/dirent/readdir.c b/libc/misc/dirent/readdir.c index 0bb03f4c2..81575283d 100644 --- a/libc/misc/dirent/readdir.c +++ b/libc/misc/dirent/readdir.c @@ -55,15 +55,5 @@ struct dirent *readdir(DIR * dir) /* We have to save the next offset here. */ dir->dd_nextoff = de->d_off; - /* convert */ - dir->dd_buf->d_ino = de->d_ino; - dir->dd_buf->d_off = de->d_off; - dir->dd_buf->d_reclen = de->d_reclen; - dir->dd_buf->d_type = 0; - if (strlen((char *) &de->d_type) > 10) - de->d_name[10] = 0; - strcpy(dir->dd_buf->d_name, (char *) &de->d_name); - __set_errno(0); - - return dir->dd_buf; + return de; } diff --git a/libc/sysdeps/linux/common/Makefile b/libc/sysdeps/linux/common/Makefile index 1d4326b4c..39ead28a1 100644 --- a/libc/sysdeps/linux/common/Makefile +++ b/libc/sysdeps/linux/common/Makefile @@ -24,9 +24,9 @@ TOPDIR=../../../../ include $(TOPDIR)Rules.mak -CSRC= waitpid.c getdents.c kernel_version.c statfix.c getdnnm.c tell.c gethstnm.c \ +CSRC= waitpid.c kernel_version.c statfix.c getdnnm.c tell.c gethstnm.c \ mkfifo.c setegid.c wait.c errno.c getpagesize.c seteuid.c wait3.c setpgrp.c \ - getdtablesize.c create_module.c ptrace.c + getdtablesize.c create_module.c ptrace.c # getdents.c COBJS=$(patsubst %.c,%.o, $(CSRC)) MSRC=syscalls.c diff --git a/libc/sysdeps/linux/common/str_syscalls.sh b/libc/sysdeps/linux/common/str_syscalls.sh index a9e984821..c82521469 100755 --- a/libc/sysdeps/linux/common/str_syscalls.sh +++ b/libc/sysdeps/linux/common/str_syscalls.sh @@ -29,6 +29,6 @@ echo "printf(\"#define __STR_NR_fcntl __STR_NR__fcntl\n\");" echo "printf(\"#define __STR_NR_reboot __STR_NR__reboot\n\");" echo "printf(\"#define __STR_NR_mmap __STR_NR__mmap\n\");" echo "printf(\"#define __STR_NR_syslog __STR_NR__syslog\n\");" -echo "printf(\"#define __STR_NR_getdents __STR_NR__getdents\n\");" +#echo "printf(\"#define __STR_NR_getdents __STR_NR__getdents\n\");" echo echo "return EXIT_SUCCESS; }" diff --git a/libc/sysdeps/linux/common/syscalls.c b/libc/sysdeps/linux/common/syscalls.c index e0aa4a91e..0b82f4973 100644 --- a/libc/sysdeps/linux/common/syscalls.c +++ b/libc/sysdeps/linux/common/syscalls.c @@ -984,11 +984,10 @@ loff_t llseek(int fd, loff_t offset, int whence) #endif //#define __NR_getdents 141 -#ifdef L__getdents -#define __NR__getdents __NR_getdents +#ifdef L_getdents #include #include -_syscall3(int, _getdents, int, fd, char *, dirp, size_t, count); +_syscall3(int, getdents, int, fd, char *, dirp, size_t, count); #endif //#define __NR__newselect 142 diff --git a/libc/sysdeps/linux/i386/bits/dirent.h b/libc/sysdeps/linux/i386/bits/dirent.h index 30e020328..1754c7cbe 100644 --- a/libc/sysdeps/linux/i386/bits/dirent.h +++ b/libc/sysdeps/linux/i386/bits/dirent.h @@ -16,6 +16,16 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* + * June 25, 2001 + * + * Removed d_type support for dirent and undefined _DIRENT_HAVE_D_TYPE; + * i.e. match the kernel structs and avoid any translation for now. + * Note: glibc fakes d_type for the dirent case. + * Note: dirent64 still has the d_type field. + */ + + #ifndef _DIRENT_H # error "Never use directly; include instead." #endif @@ -30,7 +40,6 @@ struct dirent __off64_t d_off; #endif unsigned short int d_reclen; - unsigned char d_type; char d_name[256]; /* We must not include limits.h! */ }; @@ -50,4 +59,4 @@ struct dirent64 #undef _DIRENT_HAVE_D_NAMLEN #define _DIRENT_HAVE_D_RECLEN #define _DIRENT_HAVE_D_OFF -#define _DIRENT_HAVE_D_TYPE +#undef _DIRENT_HAVE_D_TYPE -- cgit v1.2.3