]> git.cworth.org Git - apitrace/blobdiff - os_posix.cpp
Add a file identifier to snappy compressed traces
[apitrace] / os_posix.cpp
index ff320d0ebd6fbd9c4752119a2c8409e8d1906f1a..cb9b7e59113130b5f696f21a41769aa5c463fc7a 100644 (file)
@@ -31,6 +31,8 @@
 #include <unistd.h>
 #include <sys/time.h>
 #include <pthread.h>
+#include <sys/stat.h>
+#include <fcntl.h>
 
 #ifdef __APPLE__
 #include <mach-o/dyld.h>
@@ -77,8 +79,17 @@ GetProcessName(char *str, size_t size)
     ssize_t len;
     len = readlink("/proc/self/exe", szProcessPath, sizeof(szProcessPath) - 1);
     if (len == -1) {
-        *str = 0;
-        return false;
+        // /proc/self/exe is not available on setuid processes, so fallback to
+        // /proc/self/cmdline.
+        int fd = open("/proc/self/cmdline", O_RDONLY);
+        if (fd >= 0) {
+            len = read(fd, szProcessPath, sizeof(szProcessPath) - 1);
+            close(fd);
+        }
+    }
+    if (len <= 0) {
+        snprintf(str, size, "%i", (int)getpid());
+        return true;
     }
 #endif
     szProcessPath[len] = 0;