Added some SetLastError()s in GetProcAddress() and LoadLibrary().
diff --git a/loader/module.c b/loader/module.c
index dfa3719..59a15f3 100644
--- a/loader/module.c
+++ b/loader/module.c
@@ -1179,6 +1179,11 @@
HMODULE WINAPI LoadLibraryExA(LPCSTR libname,HFILE hfile,DWORD flags)
{
HMODULE hmod;
+
+ if (!libname) {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return 0;
+ }
hmod = MODULE_LoadLibraryExA( libname, hfile, flags );
if ( hmod >= 32 )
@@ -1188,6 +1193,7 @@
/* Initialize DLL just loaded */
MODULE_InitializeDLLs( hmod, DLL_PROCESS_ATTACH, NULL );
+ /* FIXME: check for failure, SLE(ERROR_DLL_INIT_FAILED) */
}
return hmod;
@@ -1365,21 +1371,29 @@
BOOL snoop )
{
WINE_MODREF *wm = MODULE32_LookupHMODULE( hModule );
+ FARPROC retproc;
if (HIWORD(function))
TRACE(win32,"(%08lx,%s)\n",(DWORD)hModule,function);
else
TRACE(win32,"(%08lx,%p)\n",(DWORD)hModule,function);
- if (!wm)
+ if (!wm) {
+ SetLastError(ERROR_INVALID_HANDLE);
return (FARPROC)0;
+ }
switch (wm->type)
{
case MODULE32_PE:
- return PE_FindExportedFunction( wm, function, snoop );
+ retproc = PE_FindExportedFunction( wm, function, snoop );
+ if (!retproc) SetLastError(ERROR_PROC_NOT_FOUND);
+ return retproc;
case MODULE32_ELF:
- return ELF_FindExportedFunction( wm, function);
+ retproc = ELF_FindExportedFunction( wm, function);
+ if (!retproc) SetLastError(ERROR_PROC_NOT_FOUND);
+ return retproc;
default:
ERR(module,"wine_modref type %d not handled.\n",wm->type);
+ SetLastError(ERROR_INVALID_HANDLE);
return (FARPROC)0;
}
}