Changeset 34959 in vbox for trunk/src/VBox/Runtime
- Timestamp:
- Dec 10, 2010 3:17:31 PM (14 years ago)
- svn:sync-xref-src-repo-rev:
- 68779
- Location:
- trunk/src/VBox/Runtime
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/common/ldr/ldrNative.cpp
r28800 r34959 96 96 RTDECL(int) RTLdrLoad(const char *pszFilename, PRTLDRMOD phLdrMod) 97 97 { 98 LogFlow(("RTLdrLoad: pszFilename=%p:{%s} phLdrMod=%p\n", pszFilename, pszFilename, phLdrMod)); 99 100 /* 101 * validate input. 102 */ 103 AssertMsgReturn(VALID_PTR(pszFilename), ("pszFilename=%p\n", pszFilename), VERR_INVALID_PARAMETER); 104 AssertMsgReturn(VALID_PTR(phLdrMod), ("phLdrMod=%p\n", phLdrMod), VERR_INVALID_PARAMETER); 98 return RTLdrLoadEx(pszFilename, phLdrMod, NULL, 0); 99 } 100 RT_EXPORT_SYMBOL(RTLdrLoad); 101 102 103 RTDECL(int) RTLdrLoadEx(const char *pszFilename, PRTLDRMOD phLdrMod, char *pszError, size_t cbError) 104 { 105 LogFlow(("RTLdrLoadEx: pszFilename=%p:{%s} phLdrMod=%p pszError=%p cbError=%zu\n", pszFilename, pszFilename, phLdrMod, pszError, cbError)); 106 107 /* 108 * Validate and massage the input. 109 */ 110 if (!pszError) 111 AssertReturn(!cbError, VERR_INVALID_PARAMETER); 112 else 113 { 114 AssertPtrReturn(pszError, VERR_INVALID_POINTER); 115 if (cbError) 116 *pszError = '\0'; 117 else 118 pszError = NULL; 119 } 120 AssertPtrReturn(pszFilename, VERR_INVALID_POINTER); 121 AssertPtrReturn(phLdrMod, VERR_INVALID_POINTER); 105 122 106 123 /* … … 119 136 * Attempt to open the module. 120 137 */ 121 rc = rtldrNativeLoad(pszFilename, &pMod->hNative );138 rc = rtldrNativeLoad(pszFilename, &pMod->hNative, pszError, cbError); 122 139 if (RT_SUCCESS(rc)) 123 140 { … … 126 143 return rc; 127 144 } 145 128 146 RTMemFree(pMod); 129 147 } 148 else if (cbError) 149 RTStrPrintf(pszError, cbError, "Failed to allocate %zu bytes for the module handle", sizeof(*pMod)); 130 150 *phLdrMod = NIL_RTLDRMOD; 131 151 LogFlow(("RTLdrLoad: returns %Rrc\n", rc)); 132 152 return rc; 133 153 } 134 RT_EXPORT_SYMBOL(RTLdrLoad );154 RT_EXPORT_SYMBOL(RTLdrLoadEx); 135 155 136 156 -
trunk/src/VBox/Runtime/include/internal/ldr.h
r28800 r34959 365 365 * @param pszFilename The image filename. 366 366 * @param phHandle Where to store the module handle on success. 367 */ 368 int rtldrNativeLoad(const char *pszFilename, uintptr_t *phHandle); 367 * @param pszError Where to store the error message. Optional. 368 * @param cbError The size of the error message buffer. 369 */ 370 int rtldrNativeLoad(const char *pszFilename, uintptr_t *phHandle, char *pszError, size_t cbError); 369 371 370 372 int rtldrPEOpen(PRTLDRREADER pReader, uint32_t fFlags, RTLDRARCH enmArch, RTFOFF offNtHdrs, PRTLDRMOD phLdrMod); -
trunk/src/VBox/Runtime/r3/posix/ldrNative-posix.cpp
r28800 r34959 41 41 42 42 43 int rtldrNativeLoad(const char *pszFilename, uintptr_t *phHandle )43 int rtldrNativeLoad(const char *pszFilename, uintptr_t *phHandle, char *pszError, size_t cbError) 44 44 { 45 45 /* … … 69 69 * Attempt load. 70 70 */ 71 72 71 void *pvMod = dlopen(pszFilename, RTLD_NOW | RTLD_LOCAL); 73 72 if (pvMod) … … 76 75 return VINF_SUCCESS; 77 76 } 78 LogRel(("rtldrNativeLoad: dlopen('%s', RTLD_NOW | RTLD_LOCAL) failed: %s\n", pszFilename, dlerror())); 77 78 const char *pszDlError = dlerror(); 79 if (pszError) 80 RTStrCopy(pszError, cbError, pszDlError); 81 LogRel(("rtldrNativeLoad: dlopen('%s', RTLD_NOW | RTLD_LOCAL) failed: %s\n", pszFilename, pszDlError)); 79 82 return VERR_FILE_NOT_FOUND; 80 83 } -
trunk/src/VBox/Runtime/r3/win/ldrNative-win.cpp
r28800 r34959 39 39 40 40 41 int rtldrNativeLoad(const char *pszFilename, uintptr_t *phHandle )41 int rtldrNativeLoad(const char *pszFilename, uintptr_t *phHandle, char *pszError, size_t cbError) 42 42 { 43 43 Assert(sizeof(*phHandle) >= sizeof(HMODULE)); … … 67 67 } 68 68 69 return RTErrConvertFromWin32(GetLastError()); 69 /* 70 * Try figure why it failed to load. 71 */ 72 DWORD dwErr = GetLastError(dwErr); 73 int rc = RTErrConvertFromWin32(dwErr); 74 if (cbError) 75 RTStrPrintf(pszError, cbError, "GetLastError=%u", dwErr); 76 return rc; 70 77 } 71 78
Note:
See TracChangeset
for help on using the changeset viewer.