OS/2 kLIBC provides a function to retrive a path from a fd. Use it instead of /proc/self/fd.
* lib/openat-proc.c (openat_proc_name): Port to OS/2 kLIBC with __libc_Back_ioFHToPath(). --- lib/openat-proc.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/lib/openat-proc.c b/lib/openat-proc.c index 4e1d341..275a48f 100644 --- a/lib/openat-proc.c +++ b/lib/openat-proc.c @@ -30,6 +30,10 @@ #include <string.h> #include <unistd.h> +#ifdef __KLIBC__ +# include <InnoTekLIBC/backend.h> +#endif + #include "intprops.h" #define PROC_SELF_FD_FORMAT "/proc/self/fd/%d/%s" @@ -56,6 +60,7 @@ openat_proc_name (char buf[OPENAT_BUFFER_SIZE], int fd, char const *file) return buf; } +#ifndef __KLIBC__ if (! proc_status) { /* Set PROC_STATUS to a positive value if /proc/self/fd is @@ -99,4 +104,28 @@ openat_proc_name (char buf[OPENAT_BUFFER_SIZE], int fd, char const *file) sprintf (result, PROC_SELF_FD_FORMAT, fd, file); return result; } +#else + /* OS/2 kLIBC provides a function to retrieve a path from a fd. Use it. */ + { + char path[_MAX_PATH]; + size_t bufsize; + char *result = buf; + + /* Get a path from a fd */ + if (__libc_Back_ioFHToPath (fd, path, sizeof (path))) + return NULL; + + bufsize = strlen (path) + 1 + strlen (file) + 1; /* 1 for '/', 1 for null */ + if (OPENAT_BUFFER_SIZE < bufsize) + { + result = malloc (bufsize); + if (! result) + return NULL; + } + + sprintf (result, "%s/%s", path, file); + + return result; + } +#endif } -- 1.9.5