diff --git a/ChangeLog b/ChangeLog index fb5f3bca48..85dc3bf5ea 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,19 @@ 1999-08-19 Ulrich Drepper + * dirent/Makefile (routines): Add getdents64. + * sysdeps/unix/sysv/linux/Makefile [dirent] (sysdep_routines): + Remove getdents64. + * dirent/dirent.h: Redirect getdirentries to getdirentries64 if + compiled with _FILE_OFFSET_BITS=64. + * sysdeps/generic/getdents64.c: New file. + * sysdeps/unix/sysv/linux/getdirentries.c: Also redefine off_t and + __lseek for getdirentries64 definition. + + * sysdeps/unix/sysv/linux/llseek.c: Make __lseek64 a strong alias. + + * sysdeps/unix/sysv/linux/sys/sendfile.h: Don't allow use with + _FILE_OFFSET_BITS=64. + * sysdeps/unix/bsd/telldir.c (seekdir): Correct type of second parameter. diff --git a/dirent/Makefile b/dirent/Makefile index aebbd64b5f..6040a3a744 100644 --- a/dirent/Makefile +++ b/dirent/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98 Free Software Foundation, Inc. +# Copyright (C) 1991,92,93,94,95,96,97,98,99 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 @@ -24,7 +24,7 @@ subdir := dirent headers := dirent.h bits/dirent.h routines := opendir closedir readdir readdir_r rewinddir \ seekdir telldir scandir alphasort versionsort \ - getdents dirfd readdir64 readdir64_r scandir64 \ + getdents getdents64 dirfd readdir64 readdir64_r scandir64 \ alphasort64 versionsort64 distribute := dirstream.h diff --git a/dirent/dirent.h b/dirent/dirent.h index f64c7fcfa5..29b9cd59cf 100644 --- a/dirent/dirent.h +++ b/dirent/dirent.h @@ -287,10 +287,27 @@ extern int versionsort64 __P ((__const __ptr_t __e1, __const __ptr_t __e2)); Reading starts at offset *BASEP, and *BASEP is updated with the new position after reading. Returns the number of bytes read; zero when at end of directory; or -1 for errors. */ +# ifndef __USE_FILE_OFFSET64 extern __ssize_t getdirentries __P ((int __fd, char *__restrict __buf, size_t __nbytes, __off_t *__restrict __basep)); +# else +# ifdef __REDIRECT +extern __ssize_t __REDIRECT (getdirentries, + __P ((int __fd, char *__restrict __buf, + size_t __nbytes, + __off_t *__restrict __basep)), + getdirentries64); +# else +# define getdirentries getdirentries64 +# endif +# endif +# ifdef __USE_LARGEFILE64 +extern __ssize_t getdirentries64 __P ((int __fd, char *__restrict __buf, + size_t __nbytes, + __off64_t *__restrict __basep)); +# endif #endif /* Use BSD or misc. */ diff --git a/sysdeps/generic/getdents64.c b/sysdeps/generic/getdents64.c new file mode 100644 index 0000000000..737e8ef80e --- /dev/null +++ b/sysdeps/generic/getdents64.c @@ -0,0 +1,37 @@ +/* Copyright (C) 1991, 1995, 1996, 1997, 1999 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 + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include +#include +#include +#include + +ssize_t +__getdirentries64 (fd, buf, nbytes, basep) + int fd; + char *buf; + size_t nbytes; + off64_t *basep; +{ + __set_errno (ENOSYS); + return -1; +} +weak_alias (__getdirentries64, getdirentries64) + +stub_warning (getdirentries64) +#include diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 04ddf916be..b4ad1a57e6 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -96,7 +96,7 @@ endif inhibit-glue = yes ifeq ($(subdir),dirent) -sysdep_routines += getdents64 getdirentries getdirentries64 +sysdep_routines += getdirentries getdirentries64 endif ifeq ($(subdir),nis) diff --git a/sysdeps/unix/sysv/linux/getdirentries.c b/sysdeps/unix/sysv/linux/getdirentries.c index 1f7ba85c55..cb81ad763b 100644 --- a/sysdeps/unix/sysv/linux/getdirentries.c +++ b/sysdeps/unix/sysv/linux/getdirentries.c @@ -22,6 +22,8 @@ #ifdef GETDENTS64 # define getdirentries getdirentries64 # define __getdents __getdents64 +# define off_t off64_t +# define __lseek __lseek64 #endif ssize_t diff --git a/sysdeps/unix/sysv/linux/llseek.c b/sysdeps/unix/sysv/linux/llseek.c index 466df377c8..a266a79b2a 100644 --- a/sysdeps/unix/sysv/linux/llseek.c +++ b/sysdeps/unix/sysv/linux/llseek.c @@ -1,5 +1,5 @@ /* Long-long seek operation. - Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998, 1999 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 @@ -37,5 +37,5 @@ __llseek (int fd, loff_t offset, int whence) &result, whence) ?: result); } weak_alias (__llseek, llseek) -weak_alias (__llseek, __lseek64) +strong_alias (__llseek, __lseek64) weak_alias (__llseek, lseek64) diff --git a/sysdeps/unix/sysv/linux/sys/sendfile.h b/sysdeps/unix/sysv/linux/sys/sendfile.h index 8008101b74..63a9c41493 100644 --- a/sysdeps/unix/sysv/linux/sys/sendfile.h +++ b/sysdeps/unix/sysv/linux/sys/sendfile.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1998 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999 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,6 +22,10 @@ #include #include +#ifdef __USE_FILE_OFFSET64 +# error " cannot be used with _FILE_OFFSET=64" +#endif + __BEGIN_DECLS /* Send COUNT bytes from file associated with IN_FD starting at OFFSET to