Author: cwittich
Date: Sun Dec 9 18:31:41 2007
New Revision: 31106
URL:
http://svn.reactos.org/svn/reactos?rev=31106&view=rev
Log:
Lei Zhang : regedit: Allow entering - for a key in a . reg file to delete that key.
<thestig at google.com>
Lei Zhang : regedit: Removed dead code from regproc.c. <thestig at google.com>
Modified:
trunk/reactos/base/applications/regedit/regproc.c
trunk/reactos/base/applications/regedit/regproc.h
Modified: trunk/reactos/base/applications/regedit/regproc.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/regedit/…
==============================================================================
--- trunk/reactos/base/applications/regedit/regproc.c (original)
+++ trunk/reactos/base/applications/regedit/regproc.c Sun Dec 9 18:31:41 2007
@@ -24,14 +24,11 @@
#define REG_VAL_BUF_SIZE 4096
-/* Delimiters used to parse the "value" to query queryValue*/
-#define QUERY_VALUE_MAX_ARGS 1
-
/* maximal number of characters in hexadecimal data line,
not including '\' character */
#define REG_FILE_HEX_LINE_LEN 76
-/* Globals used by the api setValue, queryValue */
+/* Globals used by the api setValue */
static LPSTR currentKeyName = NULL;
static HKEY currentKeyClass = 0;
static HKEY currentKeyHandle = 0;
@@ -165,55 +162,6 @@
return FALSE;
}
return TRUE;
-}
-
-/******************************************************************************
- * Converts a hex buffer into a hex comma separated values
- */
-char* convertHexToHexCSV(BYTE *buf, ULONG bufLen)
-{
- char* str;
- char* ptrStr;
- BYTE* ptrBuf;
-
- ULONG current = 0;
-
- str = HeapAlloc(GetProcessHeap(), 0, (bufLen+1)*2);
- memset(str, 0, (bufLen+1)*2);
- ptrStr = str; /* Pointer to result */
- ptrBuf = buf; /* Pointer to current */
-
- while (current < bufLen) {
- BYTE bCur = ptrBuf[current++];
- char res[3];
-
- sprintf(res, "%02x", (unsigned int)*&bCur);
- strcat(str, res);
- strcat(str, ",");
- }
-
- /* Get rid of the last comma */
- str[strlen(str)-1] = '\0';
- return str;
-}
-
-/******************************************************************************
- * Converts a hex buffer into a DWORD string
- */
-char* convertHexToDWORDStr(BYTE *buf, ULONG bufLen)
-{
- char* str;
- DWORD dw;
-
- if ( bufLen != sizeof(DWORD) ) return NULL;
-
- str = HeapAlloc(GetProcessHeap(), 0, (bufLen*2)+1);
-
- memcpy(&dw,buf,sizeof(DWORD));
- sprintf(str, "%08lx", dw);
-
- /* Get rid of the last comma */
- return str;
}
/******************************************************************************
@@ -327,6 +275,7 @@
if( arg[0] == '\"' ) arg++;
tmp = HeapAlloc(GetProcessHeap(), 0, strlen(arg)+1);
+ CHECK_ENOUGH_MEMORY(tmp);
strcpy(tmp, arg);
return tmp;
@@ -589,6 +538,18 @@
if ( bTheKeyIsOpen != FALSE )
closeKey(); /* Close the previous key before */
+ /* delete the key if we encounter '-' at the start of reg key */
+ if ( stdInput[1] == '-')
+ {
+ int last_chr = strlen(stdInput) - 1;
+
+ /* skip leading "[-" and get rid of trailing "]" */
+ if (stdInput[last_chr] == ']')
+ stdInput[last_chr] = '\0';
+ delete_registry_key(stdInput+2);
+ return;
+ }
+
if ( openKey(stdInput) != ERROR_SUCCESS )
fprintf(stderr,"%s: setValue failed to open key %s\n",
getAppName(), stdInput);
@@ -597,44 +558,6 @@
( stdInput[0] == '\"'))) /* reading a new value=data pair
*/
{
processSetValue(stdInput);
- } else /* since we are assuming that the */
- { /* file format is valid we must */
- if ( bTheKeyIsOpen ) /* be reading a blank line which */
- closeKey(); /* indicate end of this key processing */
- }
-}
-
-/******************************************************************************
- * This function is the main entry point to the queryValue type of action. It
- * receives the currently read line and dispatch the work depending on the
- * context.
- */
-void doQueryValue(LPSTR stdInput)
-{
- /*
- * We encountered the end of the file, make sure we
- * close the opened key and exit
- */
- if (stdInput == NULL) {
- if (bTheKeyIsOpen != FALSE)
- closeKey();
-
- return;
- }
-
- if ( stdInput[0] == '[') /* We are reading a new key */
- {
- if ( bTheKeyIsOpen != FALSE )
- closeKey(); /* Close the previous key before */
-
- if ( openKey(stdInput) != ERROR_SUCCESS )
- fprintf(stderr,"%s: queryValue failed to open key %s\n",
- getAppName(), stdInput);
- } else if( ( bTheKeyIsOpen ) &&
- (( stdInput[0] == '@') || /* reading a default @=data pair */
- ( stdInput[0] == '\"'))) /* reading a new value=data pair
*/
- {
- processQueryValue(stdInput);
} else /* since we are assuming that the */
{ /* file format is valid we must */
if ( bTheKeyIsOpen ) /* be reading a blank line which */
@@ -742,136 +665,6 @@
}
/******************************************************************************
- * This function is a wrapper for the queryValue function. It prepares the
- * land and clean the area once completed.
- */
-void processQueryValue(LPSTR cmdline)
-{
- UNREFERENCED_PARAMETER(cmdline);
- fprintf(stderr,"ERROR!!! - temporary disabled");
- exit(1);
-#if 0
- LPSTR argv[QUERY_VALUE_MAX_ARGS];/* args storage */
- LPSTR token = NULL; /* current token analyzed */
- ULONG argCounter = 0; /* counter of args */
- INT counter;
- HRESULT hRes = 0;
- LPSTR keyValue = NULL;
- LPSTR lpsRes = NULL;
-
- /*
- * Init storage and parse the line
- */
- for (counter=0; counter<QUERY_VALUE_MAX_ARGS; counter++)
- argv[counter]=NULL;
-
- while( (token = getToken(&cmdline, queryValueDelim[argCounter])) != NULL ) {
- argv[argCounter++] = getArg(token);
-
- if (argCounter == QUERY_VALUE_MAX_ARGS)
- break; /* Stop processing args no matter what */
- }
-
- /* The value we look for is the first token on the line */
- if ( argv[0] == NULL )
- return; /* SHOULD NOT HAPPEN */
- else
- keyValue = argv[0];
-
- if( (keyValue[0] == '@') && (strlen(keyValue) == 1) ) {
- LONG lLen = KEY_MAX_LEN;
- CHAR* lpsData=HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,KEY_MAX_LEN);
- /*
- * We need to query the key default value
- */
- hRes = RegQueryValue(
- currentKeyHandle,
- currentKeyName,
- (LPBYTE)lpsData,
- &lLen);
-
- if (hRes==ERROR_MORE_DATA) {
- lpsData=HeapReAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,lpsData,lLen);
- hRes =
RegQueryValue(currentKeyHandle,currentKeyName,(LPBYTE)lpsData,&lLen);
- }
-
- if (hRes == ERROR_SUCCESS) {
- lpsRes = HeapAlloc( GetProcessHeap(), 0, lLen);
- lstrcpynA(lpsRes, lpsData, lLen);
- }
- } else {
- DWORD dwLen = KEY_MAX_LEN;
- BYTE* lpbData=HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,KEY_MAX_LEN);
- DWORD dwType;
- /*
- * We need to query a specific value for the key
- */
- hRes = RegQueryValueEx(
- currentKeyHandle,
- keyValue,
- 0,
- &dwType,
- (LPBYTE)lpbData,
- &dwLen);
-
- if (hRes==ERROR_MORE_DATA) {
- lpbData=HeapReAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,lpbData,dwLen);
- hRes =
RegQueryValueEx(currentKeyHandle,keyValue,NULL,&dwType,(LPBYTE)lpbData,&dwLen);
- }
-
- if (hRes == ERROR_SUCCESS) {
- /*
- * Convert the returned data to a displayable format
- */
- switch ( dwType ) {
- case REG_SZ:
- case REG_EXPAND_SZ: {
- lpsRes = HeapAlloc( GetProcessHeap(), 0, dwLen);
- lstrcpynA(lpsRes, lpbData, dwLen);
- break;
- }
- case REG_DWORD: {
- lpsRes = convertHexToDWORDStr(lpbData, dwLen);
- break;
- }
- default: {
- lpsRes = convertHexToHexCSV(lpbData, dwLen);
- break;
- }
- }
- }
-
- HeapFree(GetProcessHeap(), 0, lpbData);
- }
-
-
- if ( hRes == ERROR_SUCCESS )
- fprintf(stderr,
- "%s: Value \"%s\" = \"%s\" in key [%s]\n",
- getAppName(),
- keyValue,
- lpsRes,
- currentKeyName);
-
- else
- fprintf(stderr,"%s: ERROR Value \"%s\" not found for key
\"%s\".\n",
- getAppName(),
- keyValue,
- currentKeyName);
-
- /*
- * Do some cleanup
- */
- for (counter=0; counter<argCounter; counter++)
- if (argv[counter] != NULL)
- HeapFree(GetProcessHeap(), 0, argv[counter]);
-
- if (lpsRes != NULL)
- HeapFree(GetProcessHeap(), 0, lpsRes);
-#endif
-}
-
-/******************************************************************************
* Calls command for each line of a registry file.
* Correctly processes comments (in # form), line continuation.
*
Modified: trunk/reactos/base/applications/regedit/regproc.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/regedit/…
==============================================================================
--- trunk/reactos/base/applications/regedit/regproc.h (original)
+++ trunk/reactos/base/applications/regedit/regproc.h Sun Dec 9 18:31:41 2007
@@ -34,7 +34,6 @@
void doDeleteValue(LPSTR lpsLine);
void doCreateKey(LPSTR lpsLine);
void doDeleteKey(LPSTR lpsLine);
-void doQueryValue(LPSTR lpsLine);
void doRegisterDLL(LPSTR lpsLine);
void doUnregisterDLL(LPSTR lpsLine);
@@ -66,11 +65,6 @@
*/
void processSetValue(LPSTR cmdline);
HRESULT setValue(LPSTR val_name, LPSTR val_data);
-
-/*
- * api queryValue prototypes
- */
-void processQueryValue(LPSTR cmdline);
/*
* Permission prototypes