unofficial mirror of libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] Linux: Move getdents64 to <dirent.h>
@ 2019-07-25 13:42 Florian Weimer
  2019-07-25 14:21 ` Adhemerval Zanella
  2019-07-29 18:50 ` Carlos O'Donell
  0 siblings, 2 replies; 4+ messages in thread
From: Florian Weimer @ 2019-07-25 13:42 UTC (permalink / raw
  To: libc-alpha; +Cc: Carlos O'Donell

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.

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

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] Linux: Move getdents64 to <dirent.h>
  2019-07-25 13:42 [PATCH] Linux: Move getdents64 to <dirent.h> Florian Weimer
@ 2019-07-25 14:21 ` Adhemerval Zanella
  2019-07-29 18:50 ` Carlos O'Donell
  1 sibling, 0 replies; 4+ messages in thread
From: Adhemerval Zanella @ 2019-07-25 14:21 UTC (permalink / raw
  To: libc-alpha



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
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] Linux: Move getdents64 to <dirent.h>
  2019-07-25 13:42 [PATCH] Linux: Move getdents64 to <dirent.h> Florian Weimer
  2019-07-25 14:21 ` Adhemerval Zanella
@ 2019-07-29 18:50 ` Carlos O'Donell
  2019-07-29 20:36   ` Florian Weimer
  1 sibling, 1 reply; 4+ messages in thread
From: Carlos O'Donell @ 2019-07-29 18:50 UTC (permalink / raw
  To: Florian Weimer, libc-alpha

On 7/25/19 9:42 AM, 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.

Adhemerval already reviewed this, but I double checked it also because
we are trying to make sure we don't make any mistakes here.

Please commit this immediately for master so the release goes out with
the interface definition in the expected header. This avoids having to
update the linux man pages twice also when we later change the header
location. I think unistd.h is just wrong for this Linux interface.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>

> 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.

OK.

> +   Copyright (C) 2019 Free Software Foundation, Inc.

OK.

> +   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

OK.

> 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

OK.

>   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>

OK. Include the *_ext.h header.

> +
>   #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}

OK.

>   @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.

OK.

> +   Copyright (C) 2019 Free Software Foundation, Inc.

OK.

> +   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

OK.

> +
> +__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));

OK.

> +#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));

OK.

> -
>   /* 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
> 


-- 
Cheers,
Carlos.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] Linux: Move getdents64 to <dirent.h>
  2019-07-29 18:50 ` Carlos O'Donell
@ 2019-07-29 20:36   ` Florian Weimer
  0 siblings, 0 replies; 4+ messages in thread
From: Florian Weimer @ 2019-07-29 20:36 UTC (permalink / raw
  To: Carlos O'Donell; +Cc: libc-alpha

* Carlos O'Donell:

> On 7/25/19 9:42 AM, 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.
>
> Adhemerval already reviewed this, but I double checked it also because
> we are trying to make sure we don't make any mistakes here.
>
> Please commit this immediately for master so the release goes out with
> the interface definition in the expected header. This avoids having to
> update the linux man pages twice also when we later change the header
> location. I think unistd.h is just wrong for this Linux interface.

Thanks, pushed.

Florian

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-07-29 20:36 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-07-25 13:42 [PATCH] Linux: Move getdents64 to <dirent.h> Florian Weimer
2019-07-25 14:21 ` Adhemerval Zanella
2019-07-29 18:50 ` Carlos O'Donell
2019-07-29 20:36   ` Florian Weimer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).