This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Linux: Move getdents64 to <dirent.h>



On 25/07/2019 10:42, Florian Weimer wrote:
> This matches the location of the declaration in musl.
> 
> [Passed testing on x86_64-linux-gnu, i686-linux-gnu, and
> build-many-glibcs.py (with GCC 9).  I do think we should make this
> change before the release because it's going to be the first one with
> getdents64.]
> 
> 2019-07-25  Florian Weimer  <fweimer@redhat.com>
> 
> 	Linux: Move declaration of getdents64 to <dirent.h>.
> 	* bits/dirent_ext.h: New file.
> 	* dirent/Makefile (headers): Add bits/dirent_ext.h.
> 	* dirent/dirent.h: Include <bits/dirent_ext.h>.
> 	* sysdeps/unix/sysv/linux/bits/dirent_ext.h: New file.
> 	* sysdeps/unix/sysv/linux/bits/unistd_ext.h (getdents64): Remove
> 	declaration.
> 	* manual/filesys.texi (Low-level Directory Access): Update header
> 	to dirent.h.

LGTM, thanks.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>

> 
> diff --git a/bits/dirent_ext.h b/bits/dirent_ext.h
> new file mode 100644
> index 0000000000..279fd25d25
> --- /dev/null
> +++ b/bits/dirent_ext.h
> @@ -0,0 +1,21 @@
> +/* System-specific extensions of <dirent.h>, generic version.
> +   Copyright (C) 2019 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 Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 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
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; if not, see
> +   <http://www.gnu.org/licenses/>.  */
> +
> +#ifndef _DIRENT_H
> +# error "Never include <bits/dirent_ext.h> directly; use <dirent.h> instead."
> +#endif
> diff --git a/dirent/Makefile b/dirent/Makefile
> index b002214c3d..144e448b3d 100644
> --- a/dirent/Makefile
> +++ b/dirent/Makefile
> @@ -22,7 +22,7 @@ subdir		:= dirent
>  
>  include ../Makeconfig
>  
> -headers		:= dirent.h bits/dirent.h
> +headers		:= dirent.h bits/dirent.h bits/dirent_ext.h
>  routines	:= opendir closedir readdir readdir_r rewinddir \
>  		   seekdir telldir scandir alphasort versionsort \
>  		   getdents getdents64 dirfd readdir64 readdir64_r scandir64 \
> diff --git a/dirent/dirent.h b/dirent/dirent.h
> index fc4d4859fe..d4650db17e 100644
> --- a/dirent/dirent.h
> +++ b/dirent/dirent.h
> @@ -401,4 +401,6 @@ extern int versionsort64 (const struct dirent64 **__e1,
>  
>  __END_DECLS
>  
> +#include <bits/dirent_ext.h>
> +
>  #endif /* dirent.h  */
> diff --git a/manual/filesys.texi b/manual/filesys.texi
> index 513319418a..d31dbb24b4 100644
> --- a/manual/filesys.texi
> +++ b/manual/filesys.texi
> @@ -843,7 +843,7 @@ Directory data is obtained from a file descriptor, as created by the
>  @xref{Opening and Closing Files}.
>  
>  @deftypefun ssize_t getdents64 (int @var{fd}, void *@var{buffer}, size_t @var{length})
> -@standards{Linux, unistd.h}
> +@standards{Linux, dirent.h}
>  @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
>  The @code{getdents64} function reads at most @var{length} bytes of
>  directory entry data from the file descriptor @var{fd} and stores it
> diff --git a/sysdeps/unix/sysv/linux/bits/dirent_ext.h b/sysdeps/unix/sysv/linux/bits/dirent_ext.h
> new file mode 100644
> index 0000000000..bac8f95b8f
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/bits/dirent_ext.h
> @@ -0,0 +1,33 @@
> +/* System-specific extensions of <dirent.h>.  Linux version.
> +   Copyright (C) 2019 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 Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 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
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; if not, see
> +   <http://www.gnu.org/licenses/>.  */
> +
> +#ifndef _DIRENT_H
> +# error "Never include <bits/dirent_ext.h> directly; use <dirent.h> instead."
> +#endif
> +
> +__BEGIN_DECLS
> +
> +#ifdef __USE_GNU
> +/* Read from the directory descriptor FD into LENGTH bytes at BUFFER.
> +   Return the number of bytes read on success (0 for end of
> +   directory), and -1 for failure.  */
> +extern __ssize_t getdents64 (int __fd, void *__buffer, size_t __length)
> +  __THROW __nonnull ((2));
> +#endif
> +
> +__END_DECLS
> diff --git a/sysdeps/unix/sysv/linux/bits/unistd_ext.h b/sysdeps/unix/sysv/linux/bits/unistd_ext.h
> index 6e7b2bb83d..0061172f23 100644
> --- a/sysdeps/unix/sysv/linux/bits/unistd_ext.h
> +++ b/sysdeps/unix/sysv/linux/bits/unistd_ext.h
> @@ -22,12 +22,6 @@
>  
>  #ifdef __USE_GNU
>  
> -/* Read from the directory descriptor FD into LENGTH bytes at BUFFER.
> -   Return the number of bytes read on success (0 for end of
> -   directory), and -1 for failure.  */
> -extern ssize_t getdents64 (int __fd, void *__buffer, size_t __length)
> -  __THROW __nonnull ((2));
> -
>  /* Return the kernel thread ID (TID) of the current thread.  The
>     returned value is not subject to caching.  Most Linux system calls
>     accept a TID in place of a PID.  Using the TID to change properties
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]