From 83c422e1119f7b4768d7e06dcbb080fb3ae3a203 Mon Sep 17 00:00:00 2001 From: Paul Vriens Date: Tue, 19 Jan 2010 16:02:26 +0100 Subject: [PATCH] shell32/tests: Fix crash on ancient Win95. --- dlls/shell32/tests/progman_dde.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/dlls/shell32/tests/progman_dde.c b/dlls/shell32/tests/progman_dde.c index 0a7fdaa2102..333e1f1e16b 100644 --- a/dlls/shell32/tests/progman_dde.c +++ b/dlls/shell32/tests/progman_dde.c @@ -102,6 +102,30 @@ 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; + + win_skip("ReadCabinetState is not available, reading registry directly\n"); + 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 +139,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 +175,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"); -- 2.11.4.GIT