X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fopenat-proc.c;h=2e2e966bc74820766c02b06c321c82290f46850d;hb=07809063056aef043ba738ab8229042f1ffc9659;hp=5711896a16134fa9f4471fdd16f44b419d0634c0;hpb=eb94582289e914a4dc2947a49bb16045c2b6d5c4;p=gnulib.git diff --git a/lib/openat-proc.c b/lib/openat-proc.c index 5711896a1..2e2e966bc 100644 --- a/lib/openat-proc.c +++ b/lib/openat-proc.c @@ -80,6 +80,11 @@ openat_proc_name (char buf[OPENAT_BUFFER_SIZE], int fd, char const *file) proc_status = -1; else { + /* Detect whether /proc/self/fd/%i/../fd exists, where %i is the + number of a file descriptor open on /proc/self/fd. On Linux, + that name resolves to /proc/self/fd, which was opened above. + However, on Solaris, it may resolve to /proc/self/fd/fd, which + cannot exist, since all names in /proc/self/fd are numeric. */ char dotdot_buf[PROC_SELF_FD_NAME_SIZE_BOUND (sizeof "../fd" - 1)]; sprintf (dotdot_buf, PROC_SELF_FD_FORMAT, proc_self_fd, "../fd"); proc_status = access (dotdot_buf, F_OK) ? -1 : 1;