Update.
authorUlrich Drepper <drepper@redhat.com>
Wed, 8 Apr 1998 07:13:42 +0000 (07:13 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 8 Apr 1998 07:13:42 +0000 (07:13 +0000)
1998-04-07  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* sysdeps/unix/sysv/linux/_G_config.h (_G_stat64): Define to
stat64.
(_G_OPEN64, _G_LSEEK64, _G_FSTAT64): Use namespace clean
functions.
* sysdeps/unix/sysv/linux/alpha/syscalls.list: Add __lseek64 alias
for __llseek.
* sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/llseek.c: Likewise.
* sysdeps/generic/lseek64.c (lseek64): Rename to __lseek64, and
make it a weak alias.
* posix/unistd.h: Declare __lseek64.

* libio/fileops.c (fstat) [_LIBC]: Use namespace clean function.
(_IO_file_stat): Fix typo.
(_IO_file_xsgetn): Update fd->_offset.  Read a multiple of the
block size from the file.  Use __mempcpy if _LIBC.

ChangeLog
libio/fileops.c
posix/unistd.h
sysdeps/generic/lseek64.c
sysdeps/unix/sysv/linux/_G_config.h
sysdeps/unix/sysv/linux/alpha/syscalls.list
sysdeps/unix/sysv/linux/llseek.c
sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list

index 82d417a..1a3e5b8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+1998-04-07  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * sysdeps/unix/sysv/linux/_G_config.h (_G_stat64): Define to
+       stat64.
+       (_G_OPEN64, _G_LSEEK64, _G_FSTAT64): Use namespace clean
+       functions.
+       * sysdeps/unix/sysv/linux/alpha/syscalls.list: Add __lseek64 alias
+       for __llseek.
+       * sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list: Likewise.
+       * sysdeps/unix/sysv/linux/llseek.c: Likewise.
+       * sysdeps/generic/lseek64.c (lseek64): Rename to __lseek64, and
+       make it a weak alias.
+       * posix/unistd.h: Declare __lseek64.
+
+       * libio/fileops.c (fstat) [_LIBC]: Use namespace clean function.
+       (_IO_file_stat): Fix typo.
+       (_IO_file_xsgetn): Update fd->_offset.  Read a multiple of the
+       block size from the file.  Use __mempcpy if _LIBC.
+
 1998-04-07 20:32  Ulrich Drepper  <drepper@cygnus.com>
 
        * wcsmbs/btowc.c: Fix dozends of bugs in untested code.
index 0a6d009..7e60f7c 100644 (file)
@@ -48,6 +48,7 @@ extern int errno;
 # define lseek(FD, Offset, Whence) __lseek (FD, Offset, Whence)
 # define read(FD, Buf, NBytes) __read (FD, Buf, NBytes)
 # define write(FD, Buf, NBytes) __write (FD, Buf, NBytes)
+# define fstat(FD, Buf) __fxstat (_STAT_VER, FD, Buf)
 #endif
 
 /* An fstream can be in at most one of put mode, get mode, or putback mode.
@@ -650,7 +651,7 @@ _IO_file_stat (fp, st)
      _IO_FILE *fp;
      void *st;
 {
-#ifdef _G_STAT64
+#ifdef _G_FSTAT64
   return _G_FSTAT64 (fp->_fileno, (struct _G_stat64 *) st);
 #else
   return fstat (fp->_fileno, (struct _G_stat64 *) st);
@@ -800,9 +801,13 @@ _IO_file_xsgetn (fp, data, n)
        {
          if (have > 0)
            {
+#ifdef _LIBC
+             s = __mempcpy (s, fp->_IO_read_ptr, have);
+#else
              memcpy (s, fp->_IO_read_ptr, have);
-             want -= have;
              s += have;
+#endif
+             want -= have;
              fp->_IO_read_ptr += have;
            }
 
@@ -829,7 +834,16 @@ _IO_file_xsgetn (fp, data, n)
          _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base, fp->_IO_buf_base);
          _IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
 
-         count = _IO_SYSREAD (fp, s, want);
+         /* Try to maintain alignment: read a whole number of blocks.  */
+         count = want;
+         if (fp->_IO_buf_base)
+           {
+             _IO_size_t block_size = fp->_IO_buf_end - fp->_IO_buf_base;
+             if (block_size >= 128)
+               count -= want % block_size;
+           }
+
+         count = _IO_SYSREAD (fp, s, count);
          if (count <= 0)
            {
              if (count == 0)
index 632f24d..1555f07 100644 (file)
@@ -270,6 +270,7 @@ extern int euidaccess __P ((__const char *__name, int __type));
    or the end of the file (if WHENCE is SEEK_END).
    Return the new file position.  */
 extern __off_t __lseek __P ((int __fd, __off_t __offset, int __whence));
+extern __off64_t __lseek64 __P ((int __fd, __off64_t __offset, int __whence));
 #ifndef __USE_FILE_OFFSET64
 extern __off_t lseek __P ((int __fd, __off_t __offset, int __whence));
 #else
index a2ffe2e..91ef7f3 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1995, 1996, 1997, 1998 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 @@
 
 /* Seek to OFFSET on FD, starting from WHENCE.  */
 off64_t
-lseek64 (fd, offset, whence)
+__lseek64 (fd, offset, whence)
      int fd;
      off64_t offset;
      int whence;
@@ -46,5 +46,6 @@ lseek64 (fd, offset, whence)
   __set_errno (ENOSYS);
   return -1;
 }
+weak_alias (__lseek64, lseek64)
 stub_warning (lseek64)
 #include <stub-tag.h>
index f96d4e9..e829a73 100644 (file)
@@ -30,7 +30,7 @@ typedef unsigned int wint_t;
 #define        _G_uid_t        __uid_t
 #define _G_wchar_t     wchar_t
 #define _G_wint_t      wint_t
-#define _G_stat64      stat
+#define _G_stat64      stat64
 
 typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
 typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
@@ -55,9 +55,9 @@ typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
 
 #define _G_IO_IO_FILE_VERSION 0x20001
 
-#define _G_OPEN64      open64
-#define _G_LSEEK64     lseek64
-#define _G_FSTAT64     fstat64
+#define _G_OPEN64      __open64
+#define _G_LSEEK64     __lseek64
+#define _G_FSTAT64(fd,buf) __fxstat64 (_STAT_VER, fd, buf)
 
 /* This is defined by <bits/stat.h> if `st_blksize' exists.  */
 #define _G_HAVE_ST_BLKSIZE defined (_STATBUF_ST_BLKSIZE)
index b380996..71cfbaa 100644 (file)
@@ -20,7 +20,7 @@ osf_sigprocmask       -       osf_sigprocmask 2       __osf_sigprocmask
 getpeername    -       getpeername     3       __getpeername   getpeername
 getpriority    -       getpriority     2       __getpriority   getpriority
 mmap           -       mmap            6       __mmap          mmap __mmap64 mmap64
-llseek         EXTRA   lseek           3       __llseek        llseek lseek64
+llseek         EXTRA   lseek           3       __llseek        llseek __lseek64 lseek64
 pread          EXTRA   pread           4       __pread         pread __pread64 pread64
 pwrite         EXTRA   pwrite          4       __pwrite        pwrite __pwrite64 pwrite64
 fstatfs                -       fstatfs         2       __fstatfs       fstatfs fstatfs64
index 31dd86f..62fc6ca 100644 (file)
@@ -1,5 +1,5 @@
 /* Long-long seek operation.
-   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998 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
@@ -34,4 +34,5 @@ __llseek (int fd, loff_t offset, int whence)
                                 &result, whence) ?: result);
 }
 weak_alias (__llseek, llseek)
+weak_alias (__llseek, __lseek64)
 weak_alias (__llseek, lseek64)
index 5da2025..b2b0740 100644 (file)
@@ -1,7 +1,7 @@
 # File name    Caller  Syscall name    # args  Strong name     Weak names
 
 # Whee! 64-bit systems naturally implement llseek.
-llseek         EXTRA   lseek           3       __llseek        llseek lseek64
+llseek         EXTRA   lseek           3       __llseek        llseek __lseek64 lseek64
 pread          EXTRA   pread           4       __pread         pread __pread64 pread64
 pwrite         EXTRA   pwrite          4       __pwrite        pwrite __pwrite64 pwrite64
 fstatfs                -       fstatfs         2       __fstatfs       fstatfs fstatfs64