From: Chris Lattner Date: Thu, 13 Mar 2008 05:22:05 +0000 (+0000) Subject: Fix Path::GetMainExecutable on cygwin, patch by Sam Bishop. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=3bdfa04cbe42106d2dc55d0dd980ba9e52a3bd84;p=oota-llvm.git Fix Path::GetMainExecutable on cygwin, patch by Sam Bishop. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48328 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/System/Unix/Path.inc b/lib/System/Unix/Path.inc index 8e76b543ff3..e11213294c6 100644 --- a/lib/System/Unix/Path.inc +++ b/lib/System/Unix/Path.inc @@ -251,8 +251,17 @@ Path::GetCurrentDirectory() { /// GetMainExecutable - Return the path to the main executable, given the /// value of argv[0] from program startup. Path Path::GetMainExecutable(const char *argv0, void *MainAddr) { +#if defined(__CYGWIN__) + char exe_link[64]; + snprintf(exe_link, sizeof(exe_link), "/proc/%d/exe", getpid()); + char exe_path[MAXPATHLEN]; + ssize_t len = readlink(exe_link, exe_path, sizeof(exe_path)); + if (len > 0 && len < MAXPATHLEN - 1) { + exe_path[len] = '\0'; + return Path(std::string(exe_path)); + } +#elif defined(HAVE_DLFCN_H) // Use dladdr to get executable path if available. -#ifdef HAVE_DLFCN_H Dl_info DLInfo; int err = dladdr(MainAddr, &DLInfo); if (err != 0)