Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F173400477
D52474.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
D52474.diff
View Options
diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc
--- a/ObsoleteFiles.inc
+++ b/ObsoleteFiles.inc
@@ -51,6 +51,9 @@
# xargs -n1 | sort | uniq -d;
# done
+# 20250910: readdir_r(3) removed
+OLD_FILES+=usr/share/man/man3/readdir_r.3.gz
+
# 20250826: Remove a misspelled manual
OLD_FILES+=usr/share/man/man3/sysdecode_syscallnames.3.gz
diff --git a/include/dirent.h b/include/dirent.h
--- a/include/dirent.h
+++ b/include/dirent.h
@@ -115,10 +115,6 @@
DIR *fdopendir(int);
struct dirent *
readdir(DIR *);
-#if __POSIX_VISIBLE >= 199506 || __XSI_VISIBLE >= 500
-int readdir_r(DIR *, struct dirent *, struct dirent **)
- __deprecated1("Does not take variable {NAME_MAX} into account");
-#endif
void rewinddir(DIR *);
#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 700
int scandir(const char *, struct dirent ***,
diff --git a/lib/libc/gen/Makefile.inc b/lib/libc/gen/Makefile.inc
--- a/lib/libc/gen/Makefile.inc
+++ b/lib/libc/gen/Makefile.inc
@@ -342,7 +342,6 @@
directory.3 fdopendir.3 \
directory.3 opendir.3 \
directory.3 readdir.3 \
- directory.3 readdir_r.3 \
directory.3 rewinddir.3 \
directory.3 seekdir.3 \
directory.3 telldir.3
diff --git a/lib/libc/gen/Symbol.map b/lib/libc/gen/Symbol.map
--- a/lib/libc/gen/Symbol.map
+++ b/lib/libc/gen/Symbol.map
@@ -418,7 +418,6 @@
globfree;
nftw;
readdir;
- readdir_r;
scandir;
sem_clockwait_np;
setproctitle_fast;
diff --git a/lib/libc/gen/directory.3 b/lib/libc/gen/directory.3
--- a/lib/libc/gen/directory.3
+++ b/lib/libc/gen/directory.3
@@ -25,14 +25,13 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd August 1, 2020
+.Dd September 5, 2025
.Dt DIRECTORY 3
.Os
.Sh NAME
.Nm opendir ,
.Nm fdopendir ,
.Nm readdir ,
-.Nm readdir_r ,
.Nm telldir ,
.Nm seekdir ,
.Nm rewinddir ,
@@ -50,8 +49,6 @@
.Fn fdopendir "int fd"
.Ft struct dirent *
.Fn readdir "DIR *dirp"
-.Ft int
-.Fn readdir_r "DIR *dirp" "struct dirent *entry" "struct dirent **result"
.Ft long
.Fn telldir "DIR *dirp"
.Ft void
@@ -65,15 +62,6 @@
.Ft int
.Fn dirfd "DIR *dirp"
.Sh DESCRIPTION
-.Bf -symbolic
-The
-.Fn readdir_r
-interface is deprecated
-because it cannot be used correctly unless
-.Brq Va NAME_MAX
-is a fixed value.
-.Ef
-.Pp
The
.Fn opendir
function
@@ -112,7 +100,6 @@
of
.Fn closedir ,
.Fn readdir ,
-.Fn readdir_r ,
or
.Fn rewinddir ,
the behavior is undefined.
@@ -144,34 +131,6 @@
system call.
.Pp
The
-.Fn readdir_r
-function
-provides the same functionality as
-.Fn readdir ,
-but the caller must provide a directory
-.Fa entry
-buffer to store the results in.
-The buffer must be large enough for a
-.Vt struct dirent
-with a
-.Va d_name
-array with
-.Brq Va NAME_MAX
-+ 1 elements.
-If the read succeeds,
-.Fa result
-is pointed at the
-.Fa entry ;
-upon reaching the end of the directory
-.Fa result
-is set to
-.Dv NULL .
-The
-.Fn readdir_r
-function
-returns 0 on success or an error number to indicate failure.
-.Pp
-The
.Fn telldir
function
returns a token representing the current location associated with the named
@@ -305,9 +264,7 @@
.Pp
The
.Fn readdir
-and
-.Fn readdir_r
-functions may also fail and set
+function may also fail and set
.Va errno
for any of the errors specified for the routine
.Xr getdents 2 .
@@ -338,7 +295,6 @@
.Fn fdopendir ,
.Fn opendir ,
.Fn readdir ,
-.Fn readdir_r ,
.Fn rewinddir ,
.Fn seekdir
and
@@ -391,7 +347,8 @@
.Fn readdir
performed.
This is enough for some applications which want to
-"push back the last entry read", e.g., Samba.
+.Dq push back the last entry read ,
+e.g. Samba.
Seeks back to any other location,
other than the beginning of the directory,
may result in unexpected behaviour if deletes are present.
diff --git a/lib/libc/gen/gen-compat.h b/lib/libc/gen/gen-compat.h
--- a/lib/libc/gen/gen-compat.h
+++ b/lib/libc/gen/gen-compat.h
@@ -37,6 +37,7 @@
struct freebsd11_stat;
struct freebsd11_statfs;
+int freebsd15_readdir_r(DIR *, struct dirent *, struct dirent **);
struct freebsd11_dirent *freebsd11_readdir(DIR *);
int freebsd11_readdir_r(DIR *, struct freebsd11_dirent *,
struct freebsd11_dirent **);
diff --git a/lib/libc/gen/gen-private.h b/lib/libc/gen/gen-private.h
--- a/lib/libc/gen/gen-private.h
+++ b/lib/libc/gen/gen-private.h
@@ -60,7 +60,4 @@
#define _dirfd(dirp) ((dirp)->dd_fd)
-struct dirent;
-int __readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
-
#endif /* !_GEN_PRIVATE_H_ */
diff --git a/lib/libc/gen/readdir-compat11.c b/lib/libc/gen/readdir-compat11.c
--- a/lib/libc/gen/readdir-compat11.c
+++ b/lib/libc/gen/readdir-compat11.c
@@ -95,7 +95,7 @@
struct dirent xentry, *xresult;
int error;
- error = __readdir_r(dirp, &xentry, &xresult);
+ error = freebsd15_readdir_r(dirp, &xentry, &xresult);
if (error != 0)
return (error);
if (xresult != NULL) {
diff --git a/lib/libc/gen/readdir.c b/lib/libc/gen/readdir.c
--- a/lib/libc/gen/readdir.c
+++ b/lib/libc/gen/readdir.c
@@ -41,6 +41,8 @@
#include "gen-private.h"
#include "telldir.h"
+#include "gen-compat.h"
+
/*
* get next entry in a directory.
*/
@@ -104,7 +106,7 @@
}
int
-__readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result)
+freebsd15_readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result)
{
struct dirent *dp;
int saved_errno;
@@ -133,6 +135,4 @@
return (0);
}
-__strong_reference(__readdir_r, readdir_r);
-__warn_references(readdir_r,
- "warning: this program uses readdir_r(), which is unsafe.");
+__sym_compat(readdir_r, freebsd15_readdir_r, FBSD_1.5);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Sep 26, 5:34 PM (17 h, 21 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
39607925
Default Alt Text
D52474.diff (5 KB)
Attached To
Mode
D52474: libc: Remove readdir_r(3)
Attached
Detach File
Event Timeline
Log In to Comment