[PATCH 2/2] Fix crash on ancient Win95

Paul Vriens Paul.Vriens.Wine at gmail.com
Tue Jan 19 08:39:17 CST 2010


---
 dlls/shell32/tests/progman_dde.c |   29 ++++++++++++++++++++++++-----
 1 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/dlls/shell32/tests/progman_dde.c b/dlls/shell32/tests/progman_dde.c
index 0a7fdaa..ae290ef 100644
--- a/dlls/shell32/tests/progman_dde.c
+++ b/dlls/shell32/tests/progman_dde.c
@@ -102,6 +102,29 @@ static BOOL use_common(void)
     return TRUE;
 }
 
+static BOOL full_title(void)
+{
+    CABINETSTATE cs;
+
+    memset(&cs, 0, sizeof(cs));
+    if (pReadCabinetState)
+    {
+        pReadCabinetState(&cs, sizeof(cs));
+    }
+    else
+    {
+        HKEY key;
+        DWORD size;
+
+        RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CabinetState", &key);
+        size = sizeof(cs);
+        RegQueryValueExA(key, "Settings", NULL, NULL, (LPBYTE)&cs, &size);
+        RegCloseKey(key);
+    }
+
+    return (cs.fFullPathTitle == -1);
+}
+
 static char ProgramsDir[MAX_PATH];
 
 static char Group1Title[MAX_PATH]  = "Group1";
@@ -115,8 +138,6 @@ static void init_strings(void)
     char commonprograms[MAX_PATH];
     char programs[MAX_PATH];
 
-    CABINETSTATE cs;
-
     if (pSHGetSpecialFolderPathA)
     {
         pSHGetSpecialFolderPathA(NULL, programs, CSIDL_PROGRAMS, FALSE);
@@ -153,9 +174,7 @@ static void init_strings(void)
     else
         lstrcpyA(ProgramsDir, programs);
 
-    memset(&cs, 0, sizeof(cs));
-    pReadCabinetState(&cs, sizeof(cs));
-    if (cs.fFullPathTitle == -1)
+    if (full_title())
     {
         lstrcpyA(Group1Title, ProgramsDir);
         lstrcatA(Group1Title, "\\Group1");
-- 
1.6.2.5


--------------090302050008060308050004--



More information about the wine-patches mailing list