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.
This commit is contained in:
Ulrich Drepper 1998-04-08 07:13:42 +00:00
parent 3c720987c5
commit 279eb600d9
8 changed files with 48 additions and 12 deletions

View File

@ -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> 1998-04-07 20:32 Ulrich Drepper <drepper@cygnus.com>
* wcsmbs/btowc.c: Fix dozends of bugs in untested code. * wcsmbs/btowc.c: Fix dozends of bugs in untested code.

View File

@ -48,6 +48,7 @@ extern int errno;
# define lseek(FD, Offset, Whence) __lseek (FD, Offset, Whence) # define lseek(FD, Offset, Whence) __lseek (FD, Offset, Whence)
# define read(FD, Buf, NBytes) __read (FD, Buf, NBytes) # define read(FD, Buf, NBytes) __read (FD, Buf, NBytes)
# define write(FD, Buf, NBytes) __write (FD, Buf, NBytes) # define write(FD, Buf, NBytes) __write (FD, Buf, NBytes)
# define fstat(FD, Buf) __fxstat (_STAT_VER, FD, Buf)
#endif #endif
/* An fstream can be in at most one of put mode, get mode, or putback mode. /* 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; _IO_FILE *fp;
void *st; void *st;
{ {
#ifdef _G_STAT64 #ifdef _G_FSTAT64
return _G_FSTAT64 (fp->_fileno, (struct _G_stat64 *) st); return _G_FSTAT64 (fp->_fileno, (struct _G_stat64 *) st);
#else #else
return fstat (fp->_fileno, (struct _G_stat64 *) st); return fstat (fp->_fileno, (struct _G_stat64 *) st);
@ -800,9 +801,13 @@ _IO_file_xsgetn (fp, data, n)
{ {
if (have > 0) if (have > 0)
{ {
#ifdef _LIBC
s = __mempcpy (s, fp->_IO_read_ptr, have);
#else
memcpy (s, fp->_IO_read_ptr, have); memcpy (s, fp->_IO_read_ptr, have);
want -= have;
s += have; s += have;
#endif
want -= have;
fp->_IO_read_ptr += 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_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); _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)
{ {
if (count == 0) if (count == 0)

View 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). or the end of the file (if WHENCE is SEEK_END).
Return the new file position. */ Return the new file position. */
extern __off_t __lseek __P ((int __fd, __off_t __offset, int __whence)); 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 #ifndef __USE_FILE_OFFSET64
extern __off_t lseek __P ((int __fd, __off_t __offset, int __whence)); extern __off_t lseek __P ((int __fd, __off_t __offset, int __whence));
#else #else

View 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or 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. */ /* Seek to OFFSET on FD, starting from WHENCE. */
off64_t off64_t
lseek64 (fd, offset, whence) __lseek64 (fd, offset, whence)
int fd; int fd;
off64_t offset; off64_t offset;
int whence; int whence;
@ -46,5 +46,6 @@ lseek64 (fd, offset, whence)
__set_errno (ENOSYS); __set_errno (ENOSYS);
return -1; return -1;
} }
weak_alias (__lseek64, lseek64)
stub_warning (lseek64) stub_warning (lseek64)
#include <stub-tag.h> #include <stub-tag.h>

View File

@ -30,7 +30,7 @@ typedef unsigned int wint_t;
#define _G_uid_t __uid_t #define _G_uid_t __uid_t
#define _G_wchar_t wchar_t #define _G_wchar_t wchar_t
#define _G_wint_t wint_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_int16_t __attribute__ ((__mode__ (__HI__)));
typedef int _G_int32_t __attribute__ ((__mode__ (__SI__))); 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_IO_IO_FILE_VERSION 0x20001
#define _G_OPEN64 open64 #define _G_OPEN64 __open64
#define _G_LSEEK64 lseek64 #define _G_LSEEK64 __lseek64
#define _G_FSTAT64 fstat64 #define _G_FSTAT64(fd,buf) __fxstat64 (_STAT_VER, fd, buf)
/* This is defined by <bits/stat.h> if `st_blksize' exists. */ /* This is defined by <bits/stat.h> if `st_blksize' exists. */
#define _G_HAVE_ST_BLKSIZE defined (_STATBUF_ST_BLKSIZE) #define _G_HAVE_ST_BLKSIZE defined (_STATBUF_ST_BLKSIZE)

View File

@ -20,7 +20,7 @@ osf_sigprocmask - osf_sigprocmask 2 __osf_sigprocmask
getpeername - getpeername 3 __getpeername getpeername getpeername - getpeername 3 __getpeername getpeername
getpriority - getpriority 2 __getpriority getpriority getpriority - getpriority 2 __getpriority getpriority
mmap - mmap 6 __mmap mmap __mmap64 mmap64 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 pread EXTRA pread 4 __pread pread __pread64 pread64
pwrite EXTRA pwrite 4 __pwrite pwrite __pwrite64 pwrite64 pwrite EXTRA pwrite 4 __pwrite pwrite __pwrite64 pwrite64
fstatfs - fstatfs 2 __fstatfs fstatfs fstatfs64 fstatfs - fstatfs 2 __fstatfs fstatfs fstatfs64

View File

@ -1,5 +1,5 @@
/* Long-long seek operation. /* 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or 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); &result, whence) ?: result);
} }
weak_alias (__llseek, llseek) weak_alias (__llseek, llseek)
weak_alias (__llseek, __lseek64)
weak_alias (__llseek, lseek64) weak_alias (__llseek, lseek64)

View File

@ -1,7 +1,7 @@
# File name Caller Syscall name # args Strong name Weak names # File name Caller Syscall name # args Strong name Weak names
# Whee! 64-bit systems naturally implement llseek. # 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 pread EXTRA pread 4 __pread pread __pread64 pread64
pwrite EXTRA pwrite 4 __pwrite pwrite __pwrite64 pwrite64 pwrite EXTRA pwrite 4 __pwrite pwrite __pwrite64 pwrite64
fstatfs - fstatfs 2 __fstatfs fstatfs fstatfs64 fstatfs - fstatfs 2 __fstatfs fstatfs fstatfs64