]> git.cworth.org Git - apitrace/commitdiff
Get the process name correctly on MacOSX.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Sun, 15 May 2011 11:00:10 +0000 (12:00 +0100)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Sun, 15 May 2011 11:00:10 +0000 (12:00 +0100)
os_posix.cpp

index 4c16096de0d38f052fca40881b494dd7516b5069..ff320d0ebd6fbd9c4752119a2c8409e8d1906f1a 100644 (file)
@@ -1,6 +1,6 @@
 /**************************************************************************
  *
- * Copyright 2010 VMware, Inc.
+ * Copyright 2010-2011 VMware, Inc.
  * All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -23,6 +23,7 @@
  *
  **************************************************************************/
 
+
 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <sys/time.h>
 #include <pthread.h>
 
+#ifdef __APPLE__
+#include <mach-o/dyld.h>
+#endif
+
 #include "os.hpp"
 
+
 namespace OS {
 
 
@@ -57,16 +63,24 @@ ReleaseMutex(void)
 bool
 GetProcessName(char *str, size_t size)
 {
-    ssize_t len;
     char szProcessPath[PATH_MAX + 1];
     char *lpProcessName;
 
     // http://stackoverflow.com/questions/1023306/finding-current-executables-path-without-proc-self-exe
+#ifdef __APPLE__
+    uint32_t len = sizeof szProcessPath;
+    if (_NSGetExecutablePath(szProcessPath, &len) != 0) {
+        *str = 0;
+        return false;
+    }
+#else
+    ssize_t len;
     len = readlink("/proc/self/exe", szProcessPath, sizeof(szProcessPath) - 1);
     if (len == -1) {
         *str = 0;
         return false;
     }
+#endif
     szProcessPath[len] = 0;
 
     lpProcessName = strrchr(szProcessPath, '/');