ltabb 8ed5afe62c Free the lizard
git-svn-id: svn://10.0.0.236/trunk@10 18797224-902f-48f8-a5cc-f745e15eee43
1998-03-28 02:44:41 +00:00

439 lines
7.5 KiB
C

/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include <stdlib.h>
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <string.h>
#include "NSReg.h"
#include "VerReg.h"
extern void interp(void);
#define REGFILE "c:\\temp\\reg.dat"
char *gRegistry;
int main(int argc, char *argv[]);
char *errstr(REGERR err)
{
switch( err )
{
case REGERR_OK:
return "REGERR_OK";
case REGERR_FAIL:
return "REGERR_FAIL";
case REGERR_NOMORE:
return "REGERR_MORE";
case REGERR_NOFIND:
return "REGERR_NOFIND";
case REGERR_BADREAD:
return "REGERR_BADREAD";
case REGERR_BADLOCN:
return "REGERR_BADLOCN";
case REGERR_PARAM:
return "REGERR_PARAM";
case REGERR_BADMAGIC:
return "REGERR_BADMAGIC";
default:
return "<Unknown>";
}
} // errstr
int CreateEmptyRegistry(void)
{
#if 0
int fh;
remove(REGFILE); // ignore errors like file not found
fh = _open(REGFILE, _O_CREAT, _S_IREAD|_S_IWRITE);
if (fh < 0)
return -1;
close(fh);
return 0;
#endif
return VR_CreateRegistry(CR_NEWREGISTRY, "4.0");
} // CreateEmptyRegistry
int BuildTree(void)
{
REGERR err;
err = NR_RegAdd(0,"/Machine/Old");
if (err != REGERR_OK)
{
printf("NR_RegAdd() returned %s.\n", errstr(err));
return err;
}
err = NR_RegAdd(0,"/User");
if (err != REGERR_OK)
{
printf("NR_RegAdd() returned %s.\n", errstr(err));
return err;
}
err = NR_RegAdd(0,"/Machine/4.0/Name1=Val1");
if (err != REGERR_OK)
{
printf("NR_RegAdd() returned %s.\n", errstr(err));
return err;
}
err = NR_RegAdd(0,"/Machine/4.0/Name2=Val2");
if (err != REGERR_OK)
{
printf("NR_RegAdd() returned %s.\n", errstr(err));
return err;
}
err = NR_RegAdd(0,"/Machine/4.0/Name2=Val3");
if (err != REGERR_OK)
{
printf("NR_RegAdd() returned %s.\n", errstr(err));
return err;
}
err = NR_RegAdd(0,"/Machine/4.0/Name3=Val4");
if (err != REGERR_OK)
{
printf("NR_RegAdd() returned %s.\n", errstr(err));
return err;
}
return VR_Checkpoint();
} // BuildTree
int FindKeys(void)
{
RKEY key;
REGERR err;
char buf[80];
if (NR_RegGetKey(0, "", &key) == REGERR_OK)
{
printf("NR_RegGetKey returns ok for an empty path.\n");
return 1;
}
if (NR_RegGetKey(0, "/", &key) != REGERR_OK)
{
printf("NR_RegGetKey couldn't find root.\n");
return 1;
}
if (NR_RegGetKey(0, "/Machine/Old", &key) != REGERR_OK)
{
printf("NR_RegGetKey couldn't find Old\n");
return 1;
}
printf("NR_RegGetKey returns key for Old as: 0x%lx\n", (long) key);
if (NR_RegGetKey(0, "/Machine/4.0", &key) != REGERR_OK)
{
printf("NR_RegGetKey couldn't find 4.0\n");
return 1;
}
printf("NR_RegGetKey returns key for 4.0 as: 0x%lx\n", (long) key);
// ----------------------------------------
if ((err = NR_RegFindValue(0, "/Machine/4.0/Name3", 64, buf)) != REGERR_OK)
{
printf("NR_RegFindValue (no key) returns %s\n", errstr(err));
return 1;
}
printf("NR_RegFindValue (no key) of Name3 = %s\n", buf);
if (NR_RegFindValue(key, "Aliens", 64, buf) == REGERR_OK)
{
printf("NR_RegFindValue finds Aliens.\n");
return 1;
}
if ((err = NR_RegFindValue(key, "Name3", 64, buf)) != REGERR_OK)
{
printf("NR_RegFindValue (w/key) returns %s\n", errstr(err));
return 1;
}
printf("NR_RegFindValue (w/key) of Name3 = %s\n", buf);
return 0;
} // FindTree
int DumpTree(void)
{
char *path;
char *line = "------------------------------------------------------------";
path = malloc(2048);
if (!path)
return REGERR_FAIL;
strcpy(path, "/");
puts(line);
puts(path);
while (NR_RegNext( 0, 512, path ) == REGERR_OK)
{
puts(path);
}
puts(line);
return 0;
} // DumpTree
int ChangeKeys(void)
{
REGERR err;
err = NR_RegUpdate(0,"/Machine/4.0/name3", "Infospect Software, Inc.");
if (err)
{
printf("Couldn't update name3's value to ISI.\n");
return err;
}
err = NR_RegUpdate(0,"/Machine/4.0/name3=Infospect Software, Inc.", "\"Jonathan=Kid1\"");
if (err)
{
printf("Couldn't update name3's value to Jon.\n");
return err;
}
err = NR_RegRename(0,"/Machine/4.0/name3=\"Jonathan=Kid1\"", "First born");
if (err)
{
printf("Couldn't update name3's name to First born.\n");
return err;
}
err = NR_RegUpdate(0,"/Machine/4.0/name2=Val2", "Kelley Ann");
if (err)
{
printf("Couldn't update name2's value to Kelley.\n");
return err;
}
return VR_Checkpoint();
} // ChangeKeys
int DeleteKeys(void)
{
REGERR err;
err = NR_RegDelete(0, "/User");
if (err)
{
printf("NR_RegDelete returned %s.\n", errstr(err));
return err;
}
return VR_Checkpoint();
} // DeleteKeys
int StressTest(void)
{
REGERR err;
RKEY key;
printf("Starting stress...\n");
err = NR_RegGetKey(0, "/Machine/4.0", &key);
if (err)
{
printf("Error getting key for 4.0 = %s\n", errstr(err));
return err;
}
err = NR_RegAdd(key, "A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/"
"A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/"
"A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/" );
if (err)
{
printf("Adding humungous string returned %s\n", errstr(err));
return err;
}
// TODO: Add a value to one of the middle keys, get it back.
printf("Stress done.\n");
return 0;
} // StressTest
int Install(void)
{
int err;
VERSION ver;
ver.major = 4;
ver.minor = 2;
ver.release = 10;
ver.build = 937;
ver.check = 0;
err = VR_Install("Web/Navigator/netscape.exe",
"c:\\Netscape\\NETSCAPE.EXE", &ver);
if (err)
return err;
ver.release = 19;
ver.build = 722;
ver.check = 0;
err = VR_Install("Web/Navigator/nspr.dll",
"c:\\Netscape\\System\\Vtcprac.386", &ver);
if (err)
return err;
return VR_Checkpoint();
}
int GetInfo(void)
{
int err;
char buf[256];
VERSION ver;
err = VR_GetPath("Web/Navigator/nspr.dll", 256, buf);
if (err)
return err;
printf("GetPath(nspr.dll) returns %s\n", buf);
err = VR_GetVersion("Web/Navigator/netscape.exe", &ver);
if (err)
return err;
printf("GetVersion(netscape.exe) returns %d.%d.%d.%d and check=%d\n",
ver.major, ver.minor, ver.release, ver.build, ver.check);
return 0;
}
int main(int argc, char *argv[])
{
printf("Registry Test 10/01/96.\n");
if (argc > 1)
{
gRegistry = argv[1];
}
else
{
gRegistry = REGFILE;
}
VR_RegistryName(gRegistry);
#if 1
if (NR_RegOpen(gRegistry) != REGERR_OK)
VR_CreateRegistry(CR_NEWREGISTRY, "4.0");
interp();
#else
if (CreateEmptyRegistry())
goto abort;
if (Install())
goto done;
if (DumpTree())
goto done;
if (GetInfo())
goto done;
#if defined(TEST_NR)
if ((err = NR_RegOpen(REGFILE)) != REGERR_OK)
{
printf("NR_RegOpen(%s) returned %s...Test aborted.\n", REGFILE, errstr(err));
goto abort;
}
if (BuildTree())
goto done;
if (FindKeys())
goto done;
if (DumpTree())
goto done;
if (ChangeKeys())
goto done;
if (DeleteKeys())
goto done;
if (DumpTree())
goto done;
if (StressTest())
goto done;
if (DumpTree())
goto done;
done:
NR_RegClose();
#else
done:
#endif
abort:
puts("Press Enter to continue...");
getchar();
#endif
return 0;
}