From 2958e6cc5f39ac2487b4fcbc2db48462a34ce23d Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 13 Feb 2001 22:17:17 +0000 Subject: Update. * io/ftw.c: Always use readdir64. * io/ftw64.c: Likewise. * sysdeps/unix/sysv/linux/ttyname.c: Likewise. * sysdeps/unix/sysv/linux/ttyname_r.c: Likewise. * sysdeps/generic/glob.c: Likewise. Convert results if gl_readdir callback to dirent. Still allow compiling outside glibc. * sysdeps/gnu/glob64.c: Define COMPILE_GLOB64. * sysdeps/unix/sysv/linux/i386/glob64.c: Likewise. * malloc/mtrace.c: Use fopen64. * posix/spawni.c: Use __open64. * sysdeps/unix/opendir.c: Likewise. * sysdeps/unix/sysv/linux/gethostid.c: Likewise. * sysdeps/generic/ftruncate64.c: Define __ftruncate64 and make old name a weak alias. * sysdeps/unix/sysv/aix/ftruncate64.c: Likewise. * sysdeps/unix/sysv/linux/ftruncate64.c: Likewise. * sysdeps/unix/sysv/linux/mips/ftruncate64.c: Likewise. * sysdeps/unix/sysv/linux/powerpc/ftruncate64.c: Likewise. * resolv/res_data.c: Add cast to avoid warning. * include/unistd.h: Declare __ftruncate64. * sysdeps/generic/utmp_file.c: Use LFS functions and type. --- sysdeps/generic/ftruncate64.c | 5 ++-- sysdeps/generic/glob.c | 65 +++++++++++++++++++++++++++++++++++++++---- sysdeps/generic/utmp_file.c | 26 ++++++++--------- 3 files changed, 75 insertions(+), 21 deletions(-) (limited to 'sysdeps/generic') diff --git a/sysdeps/generic/ftruncate64.c b/sysdeps/generic/ftruncate64.c index a85293b..ba27d2f 100644 --- a/sysdeps/generic/ftruncate64.c +++ b/sysdeps/generic/ftruncate64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -22,7 +22,7 @@ /* Truncate the file FD refers to to LENGTH bytes. */ int -ftruncate64 (fd, length) +__ftruncate64 (fd, length) int fd; off64_t length; { @@ -33,3 +33,4 @@ ftruncate64 (fd, length) } return __ftruncate (fd, (off_t) length); } +weak_alias (__ftruncate64, ftruncate64) diff --git a/sysdeps/generic/glob.c b/sysdeps/generic/glob.c index fd7e149..3357bb3 100644 --- a/sysdeps/generic/glob.c +++ b/sysdeps/generic/glob.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1991-1999, 2000, 2001 Free Software Foundation, Inc. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -121,6 +121,40 @@ extern int errno; # define HAVE_D_TYPE 1 #endif +#if _LIBC +# define HAVE_DIRENT64 1 +#endif + +/* If the system has the `struct dirent64' type we use it internally. */ +#if defined HAVE_DIRENT64 && !defined COMPILE_GLOB64 +# if defined HAVE_DIRENT_H || defined __GNU_LIBRARY__ +# define CONVERT_D_NAMLEN(d64, d32) +# else +# define CONVERT_D_NAMLEN(d64, d32) \ + (d64)->d_namlen = (d32)->d_namlen; +# endif + +# if (defined POSIX || defined WINDOWS32) && !defined __GNU_LIBRARY__ +# define CONVERT_D_INO(d64, d32) +# else +# define CONVERT_D_INO(d64, d32) \ + (d64)->d_ino = (d32)->d_ino; +# endif + +# ifdef HAVE_D_TYPE +# define CONVERT_D_TYPE(d64, d32) \ + (d64)->d_type = (d32)->d_type; +# else +# define CONVERT_D_TYPE(d64, d32) +# endif + +# define CONVERT_DIRENT_DIRENT64(d64, d32) \ + memcpy ((d64)->d_name, (d32)->d_name, NAMLEN (d32)); \ + CONVERT_D_NAMLEN (d64, d32) \ + CONVERT_D_INO (d64, d32) \ + CONVERT_D_TYPE (d64, d32) +#endif + #if (defined POSIX || defined WINDOWS32) && !defined __GNU_LIBRARY__ /* Posix does not require that the d_ino field be present, and some @@ -246,7 +280,7 @@ extern char *alloca (); # define sysconf(id) __sysconf (id) # define closedir(dir) __closedir (dir) # define opendir(name) __opendir (name) -# define readdir(str) __readdir (str) +# define readdir(str) __readdir64 (str) # define getpwnam_r(name, bufp, buf, len, res) \ __getpwnam_r (name, bufp, buf, len, res) # ifndef __stat64 @@ -1339,10 +1373,29 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob) { const char *name; size_t len; - struct dirent *d = - ((flags & GLOB_ALTDIRFUNC) - ? (struct dirent *)((*pglob->gl_readdir) (stream)) - : readdir ((DIR *) stream)); +#if defined HAVE_DIRENT64 && !defined COMPILE_GLOB64 + struct dirent64 *d; + struct dirent64 d64; + + if (flags & GLOB_ALTDIRFUNC) + { + struct dirent *d32 = (*pglob->gl_readdir) (stream); + if (d32 != NULL) + { + CONVERT_DIRENT_DIRENT64 (&d64, d32); + d = &d64; + } + else + d = NULL; + } + else + d = __readdir64 ((DIR *) stream); +#else + struct dirent *d = ((flags & GLOB_ALTDIRFUNC) + ? ((struct dirent *) + (*pglob->gl_readdir) (stream)) + : __readdir ((DIR *) stream)); +#endif if (d == NULL) break; if (! REAL_DIR_ENTRY (d)) diff --git a/sysdeps/generic/utmp_file.c b/sysdeps/generic/utmp_file.c index 2f172ff..60178b3 100644 --- a/sysdeps/generic/utmp_file.c +++ b/sysdeps/generic/utmp_file.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper and Paul Janzen , 1996. @@ -32,7 +32,7 @@ /* Descriptor for the file and position. */ static int file_fd = -1; -static off_t file_offset; +static off64_t file_offset; /* Cache for the last read entry. */ static struct utmp last_entry; @@ -138,7 +138,7 @@ setutent_file (void) } } - __lseek (file_fd, 0, SEEK_SET); + __lseek64 (file_fd, 0, SEEK_SET); file_offset = 0; #if _HAVE_UT_TYPE - 0 @@ -384,13 +384,13 @@ pututline_file (const struct utmp *data) if (found < 0) { /* We append the next entry. */ - file_offset = __lseek (file_fd, 0, SEEK_END); + file_offset = __lseek64 (file_fd, 0, SEEK_END); if (file_offset % sizeof (struct utmp) != 0) { file_offset -= file_offset % sizeof (struct utmp); - __ftruncate (file_fd, file_offset); + __ftruncate64 (file_fd, file_offset); - if (__lseek (file_fd, 0, SEEK_END) < 0) + if (__lseek64 (file_fd, 0, SEEK_END) < 0) { pbuf = NULL; goto unlock_return; @@ -401,7 +401,7 @@ pututline_file (const struct utmp *data) { /* We replace the just read entry. */ file_offset -= sizeof (struct utmp); - __lseek (file_fd, file_offset, SEEK_SET); + __lseek64 (file_fd, file_offset, SEEK_SET); } /* Write the new data. */ @@ -410,7 +410,7 @@ pututline_file (const struct utmp *data) /* If we appended a new record this is only partially written. Remove it. */ if (found < 0) - (void) __ftruncate (file_fd, file_offset); + (void) __ftruncate64 (file_fd, file_offset); pbuf = NULL; } else @@ -440,7 +440,7 @@ static int updwtmp_file (const char *file, const struct utmp *utmp) { int result = -1; - off_t offset; + off64_t offset; int fd; /* Open WTMP file. */ @@ -451,13 +451,13 @@ updwtmp_file (const char *file, const struct utmp *utmp) LOCK_FILE (fd, F_WRLCK); /* Remember original size of log file. */ - offset = __lseek (fd, 0, SEEK_END); + offset = __lseek64 (fd, 0, SEEK_END); if (offset % sizeof (struct utmp) != 0) { offset -= offset % sizeof (struct utmp); - __ftruncate (fd, offset); + __ftruncate64 (fd, offset); - if (__lseek (fd, 0, SEEK_END) < 0) + if (__lseek64 (fd, 0, SEEK_END) < 0) goto unlock_return; } @@ -466,7 +466,7 @@ updwtmp_file (const char *file, const struct utmp *utmp) will remain. */ if (__write (fd, utmp, sizeof (struct utmp)) != sizeof (struct utmp)) { - __ftruncate (fd, offset); + __ftruncate64 (fd, offset); goto unlock_return; } -- cgit v1.1