git: 2bd157bc732a - main - libc: Deprecate readdir_r()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 01 Aug 2025 23:13:02 UTC
The branch main has been updated by des:
URL: https://cgit.FreeBSD.org/src/commit/?id=2bd157bc732a1939cb71314e48de6118b91e0ad0
commit 2bd157bc732a1939cb71314e48de6118b91e0ad0
Author: Dag-Erling Smørgrav <des@FreeBSD.org>
AuthorDate: 2025-08-01 23:11:31 +0000
Commit: Dag-Erling Smørgrav <des@FreeBSD.org>
CommitDate: 2025-08-01 23:11:56 +0000
libc: Deprecate readdir_r()
This function was never safe to use. We marked it deprecated in the
manual page in 2016, and it is marked obsolete in POSIX 2024. Add a
linker warning and annotate the prototype.
Sponsored by: Klara, Inc.
Reviewed by: imp, markj
Differential Revision: https://reviews.freebsd.org/D51681
---
include/dirent.h | 3 ++-
lib/libc/gen/readdir.c | 2 ++
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/include/dirent.h b/include/dirent.h
index dff0e8675722..7fcdceb10b23 100644
--- a/include/dirent.h
+++ b/include/dirent.h
@@ -116,7 +116,8 @@ DIR *fdopendir(int);
struct dirent *
readdir(DIR *);
#if __POSIX_VISIBLE >= 199506 || __XSI_VISIBLE >= 500
-int readdir_r(DIR *, struct dirent *, struct dirent **);
+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
diff --git a/lib/libc/gen/readdir.c b/lib/libc/gen/readdir.c
index b70102954df1..94d2b2e8d877 100644
--- a/lib/libc/gen/readdir.c
+++ b/lib/libc/gen/readdir.c
@@ -134,3 +134,5 @@ __readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result)
}
__strong_reference(__readdir_r, readdir_r);
+__warn_references(readdir_r,
+ "warning: this program uses readdir_r(), which is unsafe.");