dirfd(3) is now specified in POSIX.1-2008, so it should be available when the _POSIX_C_SOURCE macro is defined to >= 200809L However, /usr/include/dirent.h only exposes the dirfd() macro if __BSD_VISIBLE is defined. However, __BSD_VISIBLE appears to be false if _POSIX_C_SOURCE is defined. Fix: It's probably best to add dirfd() as a function to libc, allowing the opacity of the struct _dir_desc to be preserved. How-To-Repeat: /* * To build + link: * gcc -o dirfdtest dirfdtest.c * having _POSIX_C_SOURCE defined will cause this to fail link */ #define _POSIX_C_SOURCE 200809L #include <dirent.h> int main(void) { DIR *dir = opendir("."); dirfd(dir); return 0; }
State Changed From-To: open->patched This is fixed in 10-current (with a function version of dirfd(), not by me) but not in older branches.
Fixed in 10-current, no MFC planned to older branches.