vbox的更動 25472 路徑 trunk/src/VBox/Runtime/r3/freebsd
- 時間撮記:
- 2009-12-17 下午09:48:33 (15 年 以前)
- 檔案:
-
- 修改 1 筆資料
圖例:
- 未更動
- 新增
- 刪除
-
trunk/src/VBox/Runtime/r3/freebsd/rtProcInitExePath-freebsd.cpp
r16024 r25472 33 33 *******************************************************************************/ 34 34 #define LOG_GROUP RTLOGGROUP_PROCESS 35 #include <sys/param.h> 36 #include <sys/sysctl.h> 35 37 #include <unistd.h> 36 38 #include <errno.h> … … 48 50 DECLHIDDEN(int) rtProcInitExePath(char *pszPath, size_t cchPath) 49 51 { 50 /* 51 * Read the /proc/curproc/file link, convert to native and return it. 52 */ 53 int cchLink = readlink("/proc/curproc/file", pszPath, cchPath - 1); 54 if (cchLink > 0 && (size_t)cchLink <= cchPath - 1) 52 int aiName[4]; 53 size_t cchExePath; 54 55 aiName[0] = CTL_KERN; 56 aiName[1] = KERN_PROC; 57 aiName[2] = KERN_PROC_PATHNAME; 58 aiName[3] = getpid(); 59 60 cchExePath = cchPath - 1; 61 if(sysctl(aiName, RT_ELEMENTS(aiName), pszPath, &cchExePath, NULL, 0) == 0) 55 62 { 56 pszPath[cchLink] = '\0';57 58 63 char *pszTmp = NULL; 59 64 int rc = rtPathFromNative(&pszTmp, pszPath); 60 AssertMsgRCReturn(rc, ("rc=%Rrc pszLink=\"%s\"\nhex: %.*Rhsx\n", rc, pszPath, cch Link, pszPath), rc);65 AssertMsgRCReturn(rc, ("rc=%Rrc pszLink=\"%s\"\nhex: %.*Rhsx\n", rc, pszPath, cchExePath, pszPath), rc); 61 66 62 67 size_t cch = strlen(pszTmp); … … 69 74 } 70 75 71 int err = errno; 72 73 /* 74 * Fall back on the dynamic linker since /proc is optional. 75 */ 76 void *hExe = dlopen(NULL, 0); 77 if (hExe) 78 { 79 struct link_map const *pLinkMap = 0; 80 if (dlinfo(hExe, RTLD_DI_LINKMAP, &pLinkMap) == 0) 81 { 82 const char *pszImageName = pLinkMap->l_name; 83 if (*pszImageName == '/') /* this may not always be absolute, despite the docs. :-( */ 84 { 85 char *pszTmp = NULL; 86 int rc = rtPathFromNative(&pszTmp, pszImageName); 87 AssertMsgRCReturn(rc, ("rc=%Rrc pszImageName=\"%s\"\n", rc, pszImageName), rc); 88 89 size_t cch = strlen(pszTmp); 90 AssertReturn(cch <= cchPath, VERR_BUFFER_OVERFLOW); 91 92 memcpy(pszPath, pszTmp, cch + 1); 93 RTStrFree(pszTmp); 94 95 return VINF_SUCCESS; 96 } 97 /** @todo Try search the PATH for the file name or append the current 98 * directory, which ever makes sense... */ 99 } 100 } 101 102 int rc = RTErrConvertFromErrno(err); 103 AssertMsgFailed(("rc=%Rrc err=%d cchLink=%d hExe=%p\n", rc, err, cchLink, hExe)); 76 int rc = RTErrConvertFromErrno(errno); 77 AssertMsgFailed(("rc=%Rrc errno=%d cchLink=%d\n", rc, errno, cchExePath)); 104 78 return rc; 105 79 }
注意:
瀏覽 TracChangeset
來幫助您使用更動檢視器