about summary refs log tree commit diff
path: root/sysdeps/generic
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2001-02-13 22:17:17 +0000
committerUlrich Drepper <drepper@redhat.com>2001-02-13 22:17:17 +0000
commit2958e6cc5f39ac2487b4fcbc2db48462a34ce23d (patch)
tree6a55d2abeae2e9ba1b5412c591743fdd733832ab /sysdeps/generic
parentf1a26a85046fa11da2ea51aa6d4edfbfc8549c39 (diff)
downloadglibc-2958e6cc5f39ac2487b4fcbc2db48462a34ce23d.tar.gz
glibc-2958e6cc5f39ac2487b4fcbc2db48462a34ce23d.tar.xz
glibc-2958e6cc5f39ac2487b4fcbc2db48462a34ce23d.zip
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.
Diffstat (limited to 'sysdeps/generic')
-rw-r--r--sysdeps/generic/ftruncate64.c5
-rw-r--r--sysdeps/generic/glob.c65
-rw-r--r--sysdeps/generic/utmp_file.c26
3 files changed, 75 insertions, 21 deletions
diff --git a/sysdeps/generic/ftruncate64.c b/sysdeps/generic/ftruncate64.c
index a85293baf6..ba27d2f43e 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 fd7e149539..3357bb3d17 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 2f172ffdbe..60178b3155 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 <drepper@cygnus.com>
    and Paul Janzen <pcj@primenet.com>, 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;
     }