Skip to content

Commit

Permalink
Linux: Move getdents64 to <dirent.h>
Browse files Browse the repository at this point in the history
This matches the location of the declaration in musl.

Reviewed-by: Carlos O'Donell <[email protected]>
  • Loading branch information
fweimer-rh committed Jul 29, 2019
1 parent 354e4c1 commit b8b3d5a
Show file tree
Hide file tree
Showing 7 changed files with 70 additions and 8 deletions.
12 changes: 12 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
2019-07-29 Florian Weimer <[email protected]>

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.

2019-07-29 DJ Delorie <[email protected]>
Tulio Magno Quites Machado Filho <[email protected]>

Expand Down
21 changes: 21 additions & 0 deletions bits/dirent_ext.h
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion dirent/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand Down
2 changes: 2 additions & 0 deletions dirent/dirent.h
Original file line number Diff line number Diff line change
Expand Up @@ -401,4 +401,6 @@ extern int versionsort64 (const struct dirent64 **__e1,

__END_DECLS

#include <bits/dirent_ext.h>

#endif /* dirent.h */
2 changes: 1 addition & 1 deletion manual/filesys.texi
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
33 changes: 33 additions & 0 deletions sysdeps/unix/sysv/linux/bits/dirent_ext.h
Original file line number Diff line number Diff line change
@@ -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
6 changes: 0 additions & 6 deletions sysdeps/unix/sysv/linux/bits/unistd_ext.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit b8b3d5a

Please sign in to comment.