Commit 000fd0ed authored by Francois Gouget's avatar Francois Gouget Committed by Alexandre Julliard

shell32/tests: Avoid SHDeleteKeyA() because shlwapi.dll is missing on Windows 95.

parent 31bcb3f6
...@@ -224,13 +224,80 @@ static void create_test_association(const char* extension) ...@@ -224,13 +224,80 @@ static void create_test_association(const char* extension)
CloseHandle(hkey_shell); CloseHandle(hkey_shell);
} }
/* Based on RegDeleteTreeW from dlls/advapi32/registry.c */
static LSTATUS myRegDeleteTreeA(HKEY hKey, LPCSTR lpszSubKey)
{
LONG ret;
DWORD dwMaxSubkeyLen, dwMaxValueLen;
DWORD dwMaxLen, dwSize;
CHAR szNameBuf[MAX_PATH], *lpszName = szNameBuf;
HKEY hSubKey = hKey;
if(lpszSubKey)
{
ret = RegOpenKeyExA(hKey, lpszSubKey, 0, KEY_READ, &hSubKey);
if (ret) return ret;
}
/* Get highest length for keys, values */
ret = RegQueryInfoKeyA(hSubKey, NULL, NULL, NULL, NULL,
&dwMaxSubkeyLen, NULL, NULL, &dwMaxValueLen, NULL, NULL, NULL);
if (ret) goto cleanup;
dwMaxSubkeyLen++;
dwMaxValueLen++;
dwMaxLen = max(dwMaxSubkeyLen, dwMaxValueLen);
if (dwMaxLen > sizeof(szNameBuf)/sizeof(CHAR))
{
/* Name too big: alloc a buffer for it */
if (!(lpszName = HeapAlloc( GetProcessHeap(), 0, dwMaxLen*sizeof(CHAR))))
{
ret = ERROR_NOT_ENOUGH_MEMORY;
goto cleanup;
}
}
/* Recursively delete all the subkeys */
while (TRUE)
{
dwSize = dwMaxLen;
if (RegEnumKeyExA(hSubKey, 0, lpszName, &dwSize, NULL,
NULL, NULL, NULL)) break;
ret = myRegDeleteTreeA(hSubKey, lpszName);
if (ret) goto cleanup;
}
if (lpszSubKey)
ret = RegDeleteKeyA(hKey, lpszSubKey);
else
while (TRUE)
{
dwSize = dwMaxLen;
if (RegEnumValueA(hKey, 0, lpszName, &dwSize,
NULL, NULL, NULL, NULL)) break;
ret = RegDeleteValueA(hKey, lpszName);
if (ret) goto cleanup;
}
cleanup:
/* Free buffer if allocated */
if (lpszName != szNameBuf)
HeapFree( GetProcessHeap(), 0, lpszName);
if(lpszSubKey)
RegCloseKey(hSubKey);
return ret;
}
static void delete_test_association(const char* extension) static void delete_test_association(const char* extension)
{ {
char class[MAX_PATH]; char class[MAX_PATH];
sprintf(class, "shlexec%s", extension); sprintf(class, "shlexec%s", extension);
SHDeleteKey(HKEY_CLASSES_ROOT, class); myRegDeleteTreeA(HKEY_CLASSES_ROOT, class);
SHDeleteKey(HKEY_CLASSES_ROOT, extension); myRegDeleteTreeA(HKEY_CLASSES_ROOT, extension);
} }
static void create_test_verb_dde(const char* extension, const char* verb, static void create_test_verb_dde(const char* extension, const char* verb,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment