From c17ddc868e781344417be388a7d0c49c9b7bbd64 Mon Sep 17 00:00:00 2001 From: Juergen Schmied <juergen.schmied@debitel.net> Date: Fri, 28 Apr 2000 20:16:40 +0000 Subject: [PATCH] Fixes. Use GetModuleHandleA instead of LoadLibrary for dlls imported by the spec file. --- dlls/shell32/shell32_main.c | 55 +++++++++++++++++++++---------------- dlls/shell32/shell32_main.h | 10 ++----- 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/dlls/shell32/shell32_main.c b/dlls/shell32/shell32_main.c index 1916da56444..93802a63618 100644 --- a/dlls/shell32/shell32_main.c +++ b/dlls/shell32/shell32_main.c @@ -24,11 +24,11 @@ #include "shellapi.h" #include "pidl.h" -#include "shlobj.h" #include "shell32_main.h" -#include "shlguid.h" #include "wine/undocshell.h" -#include "shpolicy.h" +#include "shlobj.h" +#include "shlguid.h" +#include "shlwapi.h" DEFAULT_DEBUG_CHANNEL(shell); @@ -97,7 +97,7 @@ void WINAPI Control_RunDLL( HWND hwnd, LPCVOID code, LPCSTR cmd, DWORD arg4 ) } /************************************************************************* - * SHGetFileInfoA [SHELL32.254] + * SHGetFileInfoA [SHELL32.@] */ DWORD WINAPI SHGetFileInfoA(LPCSTR path,DWORD dwFileAttributes, @@ -109,15 +109,12 @@ DWORD WINAPI SHGetFileInfoA(LPCSTR path,DWORD dwFileAttributes, DWORD ret = TRUE, dwAttributes = 0; IShellFolder * psfParent = NULL; IExtractIconA * pei = NULL; - LPITEMIDLIST pidlLast, pidl = NULL; + LPITEMIDLIST pidlLast = NULL, pidl = NULL; HRESULT hr = S_OK; - TRACE("(%s,0x%lx,%p,0x%x,0x%x)\n", - (flags & SHGFI_PIDL)? "pidl" : path, dwFileAttributes, psfi, sizeofpsfi, flags); + TRACE("(%s fattr=0x%lx sfi=%p(attr=0x%08lx) size=0x%x flags=0x%x)\n", + (flags & SHGFI_PIDL)? "pidl" : path, dwFileAttributes, psfi, psfi->dwAttributes, sizeofpsfi, flags); -#ifdef MORE_DEBUG - ZeroMemory(psfi, sizeof(SHFILEINFOA)); -#endif if ((flags & SHGFI_USEFILEATTRIBUTES) && (flags & (SHGFI_ATTRIBUTES|SHGFI_EXETYPE|SHGFI_PIDL))) return FALSE; @@ -159,7 +156,7 @@ DWORD WINAPI SHGetFileInfoA(LPCSTR path,DWORD dwFileAttributes, { if (flags & SHGFI_USEFILEATTRIBUTES) { - strcpy (psfi->szDisplayName, PathFindFilenameA(path)); + strcpy (psfi->szDisplayName, PathFindFileNameA(path)); } else { @@ -264,6 +261,7 @@ DWORD WINAPI SHGetFileInfoA(LPCSTR path,DWORD dwFileAttributes, if (hr != S_OK) ret = FALSE; + if(pidlLast) SHFree(pidlLast); #ifdef MORE_DEBUG TRACE ("icon=0x%08x index=0x%08x attr=0x%08lx name=%s type=%s ret=0x%08lx\n", psfi->hIcon, psfi->iIcon, psfi->dwAttributes, psfi->szDisplayName, psfi->szTypeName, ret); @@ -272,7 +270,7 @@ DWORD WINAPI SHGetFileInfoA(LPCSTR path,DWORD dwFileAttributes, } /************************************************************************* - * SHGetFileInfoW [SHELL32.255] + * SHGetFileInfoW [SHELL32.@] */ DWORD WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes, @@ -283,6 +281,21 @@ DWORD WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes, return 0; } +/************************************************************************* + * SHGetFileInfoAW [SHELL32.@] + */ +DWORD WINAPI SHGetFileInfoAW( + LPCVOID path, + DWORD dwFileAttributes, + LPVOID psfi, + UINT sizeofpsfi, + UINT flags) +{ + if(VERSION_OsIsUnicode()) + return SHGetFileInfoW(path, dwFileAttributes, psfi, sizeofpsfi, flags ); + return SHGetFileInfoA(path, dwFileAttributes, psfi, sizeofpsfi, flags ); +} + /************************************************************************* * ExtractIconA [SHELL32.133] */ @@ -755,7 +768,7 @@ HICON (WINAPI *pCreateIconFromResourceEx)(LPBYTE bits,UINT cbSize, BOOL bIcon, D static HINSTANCE hComctl32; static INT shell32_RefCount = 0; -INT shell32_ObjCount = 0; +LONG shell32_ObjCount = 0; HINSTANCE shell32_hInstance; HIMAGELIST ShellSmallIconList = 0; HIMAGELIST ShellBigIconList = 0; @@ -777,16 +790,12 @@ BOOL WINAPI Shell32LibMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad) { case DLL_PROCESS_ATTACH: shell32_RefCount++; - if (shell32_hInstance) - { - ERR("shell32.dll instantiated twice in one address space!\n"); - break; - } + if (shell32_hInstance) return TRUE; shell32_hInstance = hinstDLL; - - hComctl32 = LoadLibraryA("COMCTL32.DLL"); + hComctl32 = GetModuleHandleA("COMCTL32.DLL"); hUser32 = GetModuleHandleA("USER32"); + DisableThreadLibraryCalls(shell32_hInstance); if (!hComctl32 || !hUser32) { @@ -855,13 +864,11 @@ BOOL WINAPI Shell32LibMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad) /* this one is here to check if AddRef/Release is balanced */ if (shell32_ObjCount) { - WARN("leaving with %u objects left (memory leak)\n", shell32_ObjCount); + WARN("leaving with %lu objects left (memory leak)\n", shell32_ObjCount); } } - FreeLibrary(hComctl32); - - TRACE("refcount=%u objcount=%u \n", shell32_RefCount, shell32_ObjCount); + TRACE("refcount=%u objcount=%lu \n", shell32_RefCount, shell32_ObjCount); break; } return TRUE; diff --git a/dlls/shell32/shell32_main.h b/dlls/shell32/shell32_main.h index 1b7a711e0b3..8e71f17bae5 100644 --- a/dlls/shell32/shell32_main.h +++ b/dlls/shell32/shell32_main.h @@ -21,7 +21,7 @@ * global SHELL32.DLL variables */ extern HINSTANCE shell32_hInstance; -extern INT shell32_ObjCount; +extern LONG shell32_ObjCount; extern HIMAGELIST ShellSmallIconList; extern HIMAGELIST ShellBigIconList; extern HDPA sic_hdpa; @@ -82,11 +82,6 @@ BOOL HCR_GetFolderAttributes (REFIID riid, LPDWORD szDest); DWORD WINAPI ParseFieldA(LPCSTR src,DWORD field,LPSTR dst,DWORD len); -HGLOBAL WINAPI SHAllocShared(LPVOID psrc, DWORD size, DWORD procID); -LPVOID WINAPI SHLockShared(HANDLE hmem, DWORD procID); -BOOL WINAPI SHUnlockShared(HANDLE pmem); -HANDLE WINAPI SHFreeShared(HANDLE hmem, DWORD procID); - /**************************************************************************** * Class constructors */ @@ -114,7 +109,6 @@ HRESULT CreateStreamOnFile (LPCSTR pszFilename, IStream ** ppstm); /* fixme: rename the functions when the shell32.dll has it's own exports namespace */ HRESULT WINAPI SHELL32_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID * ppv); HRESULT WINAPI SHELL32_DllCanUnloadNow(void); -LRESULT WINAPI SHCoCreateInstance(LPSTR,REFCLSID,LPUNKNOWN,REFIID,LPVOID *); /* fixme: move away */ #define ResultFromShort(i) MAKE_SCODE(SEVERITY_SUCCESS, 0, (USHORT)(i)) @@ -169,5 +163,5 @@ void InitChangeNotifications(void); void FreeChangeNotifications(void); /* file operation */ -BOOL SHELL_DeleteDirectoryA(LPCSTR pszDir); +BOOL SHELL_DeleteDirectoryA(LPCSTR pszDir, BOOL bShowUI); #endif -- GitLab