[HEADERS]
[reactos.git] / reactos / base / applications / cmdutils / reg / reg.c
index a538d81..f65a3c8 100644 (file)
@@ -124,6 +124,21 @@ static LPBYTE get_regdata(LPWSTR data, DWORD reg_type, WCHAR separator, DWORD *r
             lstrcpyW((LPWSTR)out_data,data);
             break;
         }
+        case REG_DWORD:
+        {
+            LPWSTR rest;
+            DWORD val;
+            val = strtolW(data, &rest, 0);
+            if (rest == data) {
+                static const WCHAR nonnumber[] = {'E','r','r','o','r',':',' ','/','d',' ','r','e','q','u','i','r','e','s',' ','n','u','m','b','e','r','.','\n',0};
+                reg_printfW(nonnumber);
+                break;
+            }
+            *reg_count = sizeof(DWORD);
+            out_data = HeapAlloc(GetProcessHeap(),0,*reg_count);
+            ((LPDWORD)out_data)[0] = val;
+            break;
+        }
         default:
         {
             static const WCHAR unhandled[] = {'U','n','h','a','n','d','l','e','d',' ','T','y','p','e',' ','0','x','%','x',' ',' ','d','a','t','a',' ','%','s','\n',0};
@@ -255,7 +270,8 @@ static int reg_delete(WCHAR *key_name, WCHAR *value_name, BOOL value_empty,
         /* FIXME:  Prompt for delete */
     }
 
-    if (!value_name)
+    /* Delete subtree only if no /v* option is given */
+    if (!value_name && !value_empty && !value_all)
     {
         if (RegDeleteTreeW(root,p)!=ERROR_SUCCESS)
         {
@@ -279,13 +295,6 @@ static int reg_delete(WCHAR *key_name, WCHAR *value_name, BOOL value_empty,
         DWORD count;
         LONG rc;
 
-        if (value_name)
-        {
-            RegCloseKey(subkey);
-            reg_message(STRING_INVALID_CMDLINE);
-            return 1;
-        }
-
         rc = RegQueryInfoKeyW(subkey, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
             &maxValue, NULL, NULL, NULL);
         if (rc != ERROR_SUCCESS)
@@ -300,10 +309,10 @@ static int reg_delete(WCHAR *key_name, WCHAR *value_name, BOOL value_empty,
         while (1)
         {
             count = maxValue;
-            rc = RegEnumValueW(subkey, 0, value_name, &count, NULL, NULL, NULL, NULL);
+            rc = RegEnumValueW(subkey, 0, szValue, &count, NULL, NULL, NULL, NULL);
             if (rc == ERROR_SUCCESS)
             {
-                rc = RegDeleteValueW(subkey,value_name);
+                rc = RegDeleteValueW(subkey, szValue);
                 if (rc != ERROR_SUCCESS)
                     break;
             }