Changeset 40825 in vbox
- Timestamp:
- Apr 8, 2012 5:06:59 PM (13 years ago)
- Location:
- trunk/src/VBox/Runtime/r3
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/r3/posix/process-creation-posix.cpp
r40571 r40825 272 272 || errno == EPERM) 273 273 return RTErrConvertFromErrno(errno); 274 return V INF_TRY_AGAIN;274 return VERR_TRY_AGAIN; 275 275 } 276 276 -
trunk/src/VBox/Runtime/r3/win/process-win.cpp
r40497 r40825 1016 1016 } 1017 1017 1018 1019 /** 1020 * RTPathTraverseList callback used by RTProcCreateEx to locate the executable. 1021 */ 1022 static DECLCALLBACK(int) rtPathFindExec(char const *pchPath, size_t cchPath, void *pvUser1, void *pvUser2) 1023 { 1024 const char *pszExec = (const char *)pvUser1; 1025 char *pszRealExec = (char *)pvUser2; 1026 int rc = RTPathJoinEx(pszRealExec, RTPATH_MAX, pchPath, cchPath, pszExec, RTSTR_MAX); 1027 if (RT_FAILURE(rc)) 1028 return rc; 1029 if (RTFileExists(pszRealExec)) 1030 return VINF_SUCCESS; 1031 return VERR_TRY_AGAIN; 1032 } 1033 1034 1018 1035 RTR3DECL(int) RTProcCreateEx(const char *pszExec, const char * const *papszArgs, RTENV hEnv, uint32_t fFlags, 1019 1036 PCRTHANDLE phStdIn, PCRTHANDLE phStdOut, PCRTHANDLE phStdErr, const char *pszAsUser, … … 1025 1042 AssertPtrReturn(pszExec, VERR_INVALID_POINTER); 1026 1043 AssertReturn(*pszExec, VERR_INVALID_PARAMETER); 1027 AssertReturn(!(fFlags & ~(RTPROC_FLAGS_DETACHED | RTPROC_FLAGS_HIDDEN | RTPROC_FLAGS_SERVICE | RTPROC_FLAGS_SAME_CONTRACT | RTPROC_FLAGS_NO_PROFILE | RTPROC_FLAGS_NO_WINDOW)), VERR_INVALID_PARAMETER); 1044 AssertReturn(!(fFlags & ~(RTPROC_FLAGS_DETACHED | RTPROC_FLAGS_HIDDEN | RTPROC_FLAGS_SERVICE | RTPROC_FLAGS_SAME_CONTRACT 1045 | RTPROC_FLAGS_NO_PROFILE | RTPROC_FLAGS_NO_WINDOW | RTPROC_FLAGS_SEARCH_PATH)), 1046 VERR_INVALID_PARAMETER); 1028 1047 AssertReturn(!(fFlags & RTPROC_FLAGS_DETACHED) || !phProcess, VERR_INVALID_PARAMETER); 1029 1048 AssertReturn(hEnv != NIL_RTENV, VERR_INVALID_PARAMETER); … … 1040 1059 int rc = RTOnce(&g_rtProcWinInitOnce, rtProcWinInitOnce, NULL, NULL); 1041 1060 AssertRCReturn(rc, rc); 1061 1062 /* 1063 * Resolve the executable name via the PATH if requested. 1064 */ 1065 char szRealExec[RTPATH_MAX]; 1066 if ( (fFlags & RTPROC_FLAGS_SEARCH_PATH) 1067 && !RTPathHavePath(pszExec) 1068 && !RTPathExists(pszExec) ) 1069 { 1070 /* search */ 1071 char *pszPath; 1072 if (RTEnvExistEx(hEnv, "PATH")) 1073 pszPath = RTEnvDupEx(hEnv, "PATH"); 1074 else 1075 pszPath = RTEnvDupEx(hEnv, "Path"); 1076 rc = RTPathTraverseList(pszPath, ';', rtPathFindExec, (void *)pszExec, &szRealExec[0]); 1077 RTStrFree(pszPath); 1078 if (RT_FAILURE(rc)) 1079 return rc == VERR_END_OF_STRING ? VERR_FILE_NOT_FOUND : rc; 1080 pszExec = szRealExec; 1081 } 1042 1082 1043 1083 /*
Note:
See TracChangeset
for help on using the changeset viewer.