[MKHIVE] Fix some compilation warnings.
[reactos.git] / sdk / tools / mkhive / mkhive.c
index 39a443b..b7e3701 100644 (file)
@@ -26,6 +26,8 @@
  *                  Hermès Bélusca-Maïto
  */
 
+/* INCLUDES *****************************************************************/
+
 #include <limits.h>
 #include <string.h>
 #include <stdio.h>
 #define DIR_SEPARATOR_STRING "\\"
 #endif
 
+/* FUNCTIONS ****************************************************************/
 
 void usage(void)
 {
-    printf("Usage: mkhive -h:hive1[,hiveN...] -d:<dstdir> <inffiles>\n\n"
+    printf("Usage: mkhive [-?] -h:hive1[,hiveN...] [-u] -d:<dstdir> <inffiles>\n\n"
            "  -h:hiveN  - Comma-separated list of hives to create. Possible values are:\n"
            "              SETUPREG, SYSTEM, SOFTWARE, DEFAULT, SAM, SECURITY, BCD.\n"
+           "  -u        - Generate file names in uppercase (default: lowercase) (TEMPORARY FLAG!).\n"
            "  -d:dstdir - The binary hive files are created in this directory.\n"
-           "  inffiles  - List of INF files with full path.\n");
+           "  inffiles  - List of INF files with full path.\n"
+           "  -?        - Displays this help screen.\n");
 }
 
 void convert_path(char *dst, char *src)
@@ -89,7 +94,9 @@ void convert_path(char *dst, char *src)
 int main(int argc, char *argv[])
 {
     INT ret;
-    UINT i;
+    INT i;
+    PSTR ptr;
+    BOOL UpperCaseFileName = FALSE;
     PCSTR HiveList = NULL;
     CHAR DestPath[PATH_MAX] = "";
     CHAR FileName[PATH_MAX];
@@ -105,6 +112,17 @@ int main(int argc, char *argv[])
     /* Read the options */
     for (i = 1; i < argc && *argv[i] == '-'; i++)
     {
+        if (argv[i][1] == '?' && argv[i][2] == 0)
+        {
+            usage();
+            return 0;
+        }
+
+        if (argv[i][1] == 'u' && argv[i][2] == 0)
+        {
+            UpperCaseFileName = TRUE;
+        }
+        else
         if (argv[i][1] == 'h' && (argv[i][2] == ':' || argv[i][2] == '='))
         {
             HiveList = argv[i] + 3;
@@ -159,6 +177,9 @@ int main(int argc, char *argv[])
 
         strcpy(FileName, DestPath);
         strcat(FileName, DIR_SEPARATOR_STRING);
+
+        ptr = FileName + strlen(FileName);
+
         strcat(FileName, RegistryHives[i].HiveName);
 
         /* Exception for the special setup registry hive */
@@ -166,6 +187,18 @@ int main(int argc, char *argv[])
         if (i == 0)
             strcat(FileName, ".HIV");
 
+        /* Adjust file name case if needed */
+        if (UpperCaseFileName)
+        {
+            for (; *ptr; ++ptr)
+                *ptr = toupper(*ptr);
+        }
+        else
+        {
+            for (; *ptr; ++ptr)
+                *ptr = tolower(*ptr);
+        }
+
         if (!ExportBinaryHive(FileName, RegistryHives[i].CmHive))
             goto Quit;