From 353932e6da49ccb3d695aa3850124d20f15068db Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Tue, 4 Aug 2009 16:43:37 +0000 Subject: [PATCH] - Sync FreeLibrary with Wine. Fixes an exception at installation Firefox 3.5.x svn path=/trunk/; revision=42385 --- reactos/dll/win32/kernel32/misc/ldr.c | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/reactos/dll/win32/kernel32/misc/ldr.c b/reactos/dll/win32/kernel32/misc/ldr.c index a967fc6ffa6..58c6bc096ae 100644 --- a/reactos/dll/win32/kernel32/misc/ldr.c +++ b/reactos/dll/win32/kernel32/misc/ldr.c @@ -340,28 +340,25 @@ GetProcAddress( HMODULE hModule, LPCSTR lpProcName ) /* * @implemented */ -BOOL -WINAPI -FreeLibrary( HMODULE hLibModule ) +BOOL WINAPI FreeLibrary(HINSTANCE hLibModule) { - PVOID Module = (PVOID)((ULONG_PTR)hLibModule & ~1); NTSTATUS Status; + if (!hLibModule) + { + SetLastError(ERROR_INVALID_HANDLE); + return FALSE; + } + if ((ULONG_PTR)hLibModule & 1) { - if (!RtlImageNtHeader(Module)) - { - SetLastErrorByStatus(STATUS_INVALID_IMAGE_FORMAT); - return FALSE; - } - - Status = NtUnmapViewOfSection(NtCurrentProcess(), Module); - } - else - { - Status = LdrUnloadDll(hLibModule); + /* this is a LOAD_LIBRARY_AS_DATAFILE module */ + char *ptr = (char *)hLibModule - 1; + UnmapViewOfFile(ptr); + return TRUE; } + Status = LdrUnloadDll(hLibModule); if (!NT_SUCCESS(Status)) { SetLastErrorByStatus(Status);