[RESENT]: Fixed winedbg example configuration

Jon Bright jon at siliconcircus.com
Fri Jul 18 11:17:08 CDT 2003


Hi,

Attached, a better test.  The conclusion:

  - Values are enumerated in the order they were created, even if a 
value's been deleted in the meantime.
  - Key are enumerated alphabetically, irrespective of the order in 
which they were created.

--
Jon Bright
Lead Programmer, Silicon Circus Ltd.
http://www.siliconcircus.com
-------------- next part --------------
//---------------------------------------------------------------------------
#include <windows.h>
#include <stdio.h>
#pragma hdrstop
//---------------------------------------------------------------------------

int fail(char *stage)
{
	printf("FAILED: %s\n",stage);
	return -1;
}

#pragma argsused
int main(int argc, char* argv[])
{
	HKEY software, wine, valorder, keyorder, k;
	char name[2];
	DWORD i,nsize,type,ri,risize,disp;
	FILETIME ft;

	if (RegCreateKeyEx(HKEY_CURRENT_USER,"Software",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&software,&disp)!=ERROR_SUCCESS)
		return fail("Create-Software");
	if (RegCreateKeyEx(software,"Wine",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&wine,&disp)!=ERROR_SUCCESS)
		return fail("Create-Wine");
	if (RegCreateKeyEx(wine,"TestValOrder",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&valorder,&disp)!=ERROR_SUCCESS)
		return fail("Create-TestValOrder");

	name[1]='\0';
	for (i=26; i; i--)
	{
		name[0]='A'+i-1;
		if (RegSetValueEx(valorder,name,0,REG_DWORD,(BYTE*)&i,sizeof(i))!=ERROR_SUCCESS)
			return fail("SetValueEx");
	}
	for (i=0; i<26; i++)
	{
		nsize = 2;
		risize = sizeof(ri);
		if (RegEnumValue(valorder,i,name,&nsize,NULL,&type,(BYTE*)&ri,&risize)!=ERROR_SUCCESS)
			return fail("EnumValue");
		printf("%2d. %s = %d\n",i,name,ri);
		if (ri!=26-i)
			return fail("Comparison");
	}

	if (RegDeleteValue(valorder,"C"))
		return fail("DeleteValue");
	i = 1000;
	if (RegSetValueEx(valorder,"1",0,REG_DWORD,(BYTE*)&i,sizeof(i))!=ERROR_SUCCESS)
		return fail("SetValueEx");
	for (i=0; i<26; i++)
	{
		nsize = 2;
		risize = sizeof(ri);
		if (RegEnumValue(valorder,i,name,&nsize,NULL,&type,(BYTE*)&ri,&risize)!=ERROR_SUCCESS)
			return fail("EnumValue");
		printf("%2d. %s = %d\n",i,name,ri);
		if ((i<23 && ri!=26-i) || ((i==23 || i==24) && ri!=25-i) || (i==25 && ri!=1000))
			return fail("Comparison");
	}

	if (RegCloseKey(valorder)!=ERROR_SUCCESS)
		return fail("CloseKey");

	if (RegDeleteKey(wine,"TestValOrder")!=ERROR_SUCCESS)
		return fail("DeleteKey-Val");

	if (RegCreateKeyEx(wine,"TestKeyOrder",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&keyorder,&disp)!=ERROR_SUCCESS)
		return fail("Create-TestKeyOrder");
	name[1]='\0';
	for (i=26; i; i--)
	{
		name[0]='A'+i-1;
		if (RegCreateKeyEx(keyorder,name,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&k,&disp)!=ERROR_SUCCESS)
			return fail("Create-KeyLoop");
		if (RegCloseKey(k)!=ERROR_SUCCESS)
			return fail("Close-KeyLoop");
	}
	for (i=0; i<26; i++)
	{
		nsize = 2;
		if (RegEnumKeyEx(keyorder,i,name,&nsize,NULL,NULL,NULL,&ft)!=ERROR_SUCCESS)
			return fail("EnumKey");
		printf("%2d. %s\n",i,name);
		if (name[0]!=(char)('A'+i))
			return fail("Comparison");
	}
	for (i=0; i<26; i++)
	{
		name[0]='A'+i;
		if (RegDeleteKey(keyorder,name)!=ERROR_SUCCESS)
			return fail("Delete-KeyLoop");
	}

	if (RegCloseKey(keyorder)!=ERROR_SUCCESS)
		return fail("Close-KeyOrder");

	if (RegDeleteKey(wine,"TestKeyOrder")!=ERROR_SUCCESS)
		return fail("DeleteKey-Key");

	return 0;
}
//---------------------------------------------------------------------------


More information about the wine-devel mailing list