+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.
# 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.
_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);
{
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;
}
_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)
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
-/* 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
/* 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;
__set_errno (ENOSYS);
return -1;
}
+weak_alias (__lseek64, lseek64)
stub_warning (lseek64)
#include <stub-tag.h>
#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__)));
#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)
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
/* 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
&result, whence) ?: result);
}
weak_alias (__llseek, llseek)
+weak_alias (__llseek, __lseek64)
weak_alias (__llseek, lseek64)
# 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