96
96
RTDECL(int) RTLdrLoad(const char *pszFilename, PRTLDRMOD phLdrMod)
98
LogFlow(("RTLdrLoad: pszFilename=%p:{%s} phLdrMod=%p\n", pszFilename, pszFilename, phLdrMod));
98
return RTLdrLoadEx(pszFilename, phLdrMod, RTLDRLOAD_FLAGS_LOCAL, NULL);
100
RT_EXPORT_SYMBOL(RTLdrLoad);
103
RTDECL(int) RTLdrLoadEx(const char *pszFilename, PRTLDRMOD phLdrMod, uint32_t fFlags, PRTERRINFO pErrInfo)
105
LogFlow(("RTLdrLoadEx: pszFilename=%p:{%s} phLdrMod=%p fFlags=%#x pErrInfo=%p\n", pszFilename, pszFilename, phLdrMod, fFlags, pErrInfo));
108
* Validate and massage the input.
103
AssertMsgReturn(VALID_PTR(pszFilename), ("pszFilename=%p\n", pszFilename), VERR_INVALID_PARAMETER);
104
AssertMsgReturn(VALID_PTR(phLdrMod), ("phLdrMod=%p\n", phLdrMod), VERR_INVALID_PARAMETER);
110
RTErrInfoClear(pErrInfo);
111
AssertPtrReturn(pszFilename, VERR_INVALID_POINTER);
112
AssertPtrReturn(phLdrMod, VERR_INVALID_POINTER);
113
AssertReturn(!(fFlags & ~RTLDRLOAD_FLAGS_VALID_MASK), VERR_INVALID_PARAMETER);
107
116
* Allocate and initialize module structure.
119
128
* Attempt to open the module.
121
rc = rtldrNativeLoad(pszFilename, &pMod->hNative);
130
rc = rtldrNativeLoad(pszFilename, &pMod->hNative, fFlags, pErrInfo);
122
131
if (RT_SUCCESS(rc))
124
133
*phLdrMod = &pMod->Core;
125
134
LogFlow(("RTLdrLoad: returns %Rrc *phLdrMod=%RTldrm\n", rc, *phLdrMod));
141
RTErrInfoSetF(pErrInfo, rc, "Failed to allocate %zu bytes for the module handle", sizeof(*pMod));
130
142
*phLdrMod = NIL_RTLDRMOD;
131
143
LogFlow(("RTLdrLoad: returns %Rrc\n", rc));
134
RT_EXPORT_SYMBOL(RTLdrLoad);
146
RT_EXPORT_SYMBOL(RTLdrLoadEx);