From bb963792f53f53febbb2b10133db488413caac13 Mon Sep 17 00:00:00 2001 From: cxl Date: Fri, 10 Apr 2020 15:19:03 +0000 Subject: [PATCH] MacOS: GetExeFilePath fix git-svn-id: svn://ultimatepp.org/upp/trunk@14290 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/Core/App.cpp | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/uppsrc/Core/App.cpp b/uppsrc/Core/App.cpp index bf2651b42..306047788 100644 --- a/uppsrc/Core/App.cpp +++ b/uppsrc/Core/App.cpp @@ -1,4 +1,5 @@ #include "Core.h" +#include #ifdef PLATFORM_WIN32 #define Ptr Ptr_ @@ -83,17 +84,28 @@ extern char Argv0__[]; const char *procexepath_() { static char h[_MAX_PATH + 1]; ONCELOCK { - char link[100]; -#ifdef PLATFORM_BSD + char link[1024]; +#ifdef PLATFORM_COCOA + uint32_t sz = 1024; + if(_NSGetExecutablePath(link, &sz)) + *link = 0; +#elif defined(PLATFORM_BSD) sprintf(link, "/proc/%d/file", getpid()); #else sprintf(link, "/proc/%d/exe", getpid()); #endif - int ret = readlink(link, h, _MAX_PATH); - if(ret > 0 && ret < _MAX_PATH) - h[ret] = '\0'; - else - *h = '\0'; + FindFile ff(link); + if(ff) { + if(ff.IsSymLink()) { + int ret = readlink(link, h, _MAX_PATH); + if(ret > 0 && ret < _MAX_PATH) + h[ret] = '\0'; + else + *h = '\0'; + } + else + strcpy(h, link); + } } return h; }