bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v7 08/11] openat_proc_name: port to OS/2 kLIBC


From: KO Myung-Hun
Subject: [PATCH v7 08/11] openat_proc_name: port to OS/2 kLIBC
Date: Thu, 14 Jan 2016 11:23:48 +0900

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 15a8c79..db34244 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
 }
-- 
2.7.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]