Alexandre Julliard : user32: Get rid of support for extracting icons from builtin dlls.

Alexandre Julliard julliard at winehq.org
Wed Dec 23 10:04:10 CST 2009


Module: wine
Branch: master
Commit: 73cf431aac5856c758869088d6b784a6ba23f685
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=73cf431aac5856c758869088d6b784a6ba23f685

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Dec 23 14:27:22 2009 +0100

user32: Get rid of support for extracting icons from builtin dlls.

We now have fake dll files for all dlls, the icons can be loaded from there.

---

 dlls/user32/exticon.c |  101 -------------------------------------------------
 1 files changed, 0 insertions(+), 101 deletions(-)

diff --git a/dlls/user32/exticon.c b/dlls/user32/exticon.c
index 1d30f25..a720cf3 100644
--- a/dlls/user32/exticon.c
+++ b/dlls/user32/exticon.c
@@ -233,81 +233,6 @@ static BYTE * ICO_GetIconDirectory( LPBYTE peimage, LPicoICONDIR* lplpiID, ULONG
 	return 0;
 }
 
-/******************************************************************************
- *  struct extract_icons_state [internal]
- *
- * Used to carry params and state through the iterations of EnumResourceNames in ICO_ExtractIconExW 
- */
-struct extract_icons_state {
-    INT     nBaseIndex; /* Zero based index or negated integer id of the first icon to extract. */
-    UINT    nIcons;     /* Number of icons to extract. */
-    UINT    cxDesired;  /* Desired horizontal size in pixels (Might be two sizes in HI/LOWORD). */
-    UINT    cyDesired;  /* Desired vertical size in pixels (Might be two sizes in HI/LOWORD). */
-    UINT    fuLoad;     /* Flags passed to LoadImage. */
-    INT     cIter;      /* Iteration counter. */
-    HICON   *pahIcon;   /* Pointer to an array where the icon handles will be stored. */
-    UINT    *paIconId;  /* Pointer to an array where the icon identifiers will be stored. */ 
-};
-
-/******************************************************************************
- *  extract_icons_callback [internal] 
- *
- * Callback function of type ENUMRESNAMEPROC for EnumResourceNames. Used in
- * ICO_ExtractIconsExW.
- */
-static BOOL CALLBACK extract_icons_callback(HMODULE hModule, LPCWSTR pwszType, LPWSTR pwszName,
-    LONG_PTR lParam) 
-{
-    struct extract_icons_state *pState = (struct extract_icons_state *)lParam;
-    INT idCurrent = LOWORD(pwszName);
-
-    /* If the handle array pointer is NULL, we just count the number of icons in the module. */
-    if (!pState->pahIcon) {
-        pState->cIter++;
-        return TRUE;
-    }
-   
-    /* If we didn't already start extracting icons (cIter == 0), we look if the current
-     * icon is the one we should start with. That's the case if nBaseIndex is negative and
-     * it's absolute value matches the current icon's identifier. Or if nBaseIndex is positive
-     * and we already omitted the first nBaseIndex icons. */
-    if (pState->cIter == 0) {
-        if (pState->nBaseIndex < 0) {
-            if (!IS_INTRESOURCE(pwszName) || idCurrent != -pState->nBaseIndex) {
-                return TRUE;
-            }
-        } else if (pState->nBaseIndex > 0) {
-            pState->nBaseIndex--;
-            return TRUE;
-        }
-    }
-
-    if (pState->cIter < pState->nIcons) {
-        /* Load the current icon with the size given in the LOWORD of cx/cyDesired */
-        pState->pahIcon[pState->cIter] = 
-            LoadImageW(hModule, pwszName, IMAGE_ICON, LOWORD(pState->cxDesired), 
-                       LOWORD(pState->cyDesired), pState->fuLoad);
-        /* FIXME: The resource's identifier (that is not idCurrent, which is the
-         * identifier of the icon directory) should be stored in paIconId, but I don't
-         * know how to query for it. */ 
-        if (pState->paIconId) pState->paIconId[pState->cIter] = 0;
-        pState->cIter++;
-
-        /* If there is a second desired size given in the HIWORDs of cx/cyDesired, load too. 
-         * There seems to be an off-by-one error here, since pState->cIter might now be equal
-         * to pState->nIcons, but this is in fact how it works on windows. */
-        if (HIWORD(pState->cxDesired) && HIWORD(pState->cyDesired)) {
-            pState->pahIcon[pState->cIter] = 
-                LoadImageW(hModule, pwszName, IMAGE_ICON, HIWORD(pState->cxDesired), 
-                           HIWORD(pState->cyDesired), pState->fuLoad);
-            if (pState->paIconId) pState->paIconId[pState->cIter] = 0;
-            pState->cIter++;
-        }
-    }
-
-    return pState->cIter < pState->nIcons;
-}
-
 /*************************************************************************
  *	ICO_ExtractIconExW		[internal]
  *
@@ -346,34 +271,8 @@ static UINT ICO_ExtractIconExW(
         dwSearchReturn = SearchPathW(NULL, lpszExeFileName, NULL, sizeof(szExePath) / sizeof(szExePath[0]), szExePath, NULL);
         if ((dwSearchReturn == 0) || (dwSearchReturn > sizeof(szExePath) / sizeof(szExePath[0])))
         {
-          /* This is very wine specific: If the user tries to extract icons from system dlls, 
-           * wine's builtin *.dll.so's will not be found (Even if they would be found it wouldn't 
-           * work, since they are not in PE-format). Thus, if the SearchPath call fails, we try
-           * to load the file with LoadLibrary and extract the icons with LoadImage (via
-           * EnumResourceNames).
-           */
-          struct extract_icons_state state;
-          HMODULE hDllSo = LoadLibraryW(lpszExeFileName);
-          
-          if (!hDllSo) {
             WARN("File %s not found or path too long\n", debugstr_w(lpszExeFileName));
             return -1;
-          }
-
-          state.nBaseIndex = nIconIndex;
-          state.nIcons = nIcons;
-          state.cxDesired = cxDesired;
-          state.cyDesired = cyDesired;
-          state.fuLoad = flags;
-          state.cIter = 0;
-          state.pahIcon = RetPtr;
-          state.paIconId = pIconId;
-          
-          EnumResourceNamesW(hDllSo, MAKEINTRESOURCEW(RT_GROUP_ICON), extract_icons_callback, 
-                             (LONG_PTR)&state);
-          FreeLibrary(hDllSo);
-  
-          return state.cIter;
         }
 
 	hFile = CreateFileW(szExePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0);




More information about the wine-cvs mailing list