Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 1 Aug 2025 23:13:02 GMT
From:      Dag-Erling =?utf-8?Q?Sm=C3=B8rgrav?= <des@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 2bd157bc732a - main - libc: Deprecate readdir_r()
Message-ID:  <202508012313.571ND2Nu053518@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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.");



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202508012313.571ND2Nu053518>