]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/CCode/Source/CreateMtFile/CreateMtFile.c
1. Refresh applicable library instances after one illegal library instance is removed.
[mirror_edk2.git] / Tools / CCode / Source / CreateMtFile / CreateMtFile.c
index 1c17b3de23342db897695777e540883be22d8b8d..8bb07293e3707d4bc707743948914d82163df881 100644 (file)
@@ -26,7 +26,9 @@ Abstract:
 \r
 #include <Common/UefiBaseTypes.h>\r
 \r
-#define PROGRAM_NAME  "CreateMtFile"\r
+#define UTILITY_NAME "CreateMtFile"\r
+#define UTILITY_MAJOR_VERSION 1\r
+#define UTILITY_MINOR_VERSION 1\r
 \r
 typedef struct {\r
   INT8    *OutFileName;\r
@@ -48,6 +50,12 @@ Usage (
   VOID\r
   );\r
 \r
+static\r
+void\r
+Version (\r
+  VOID\r
+  );\r
+\r
 int\r
 main (\r
   IN INT32  Argc,\r
@@ -86,11 +94,7 @@ Returns:
   // Open the output file\r
   //\r
   if ((OutFptr = fopen (Options.OutFileName, "wb")) == NULL) {\r
-    fprintf (\r
-      stdout,\r
-      PROGRAM_NAME " ERROR: Could not open output file '%s' for writing\n",\r
-      Options.OutFileName\r
-      );\r
+      printf (" ERROR: Could not open output file '%s' for writing\n", Options.OutFileName);\r
     return EFI_DEVICE_ERROR;\r
   }\r
   //\r
@@ -99,7 +103,7 @@ Returns:
   while (Options.FileSize > 0) {\r
     if (fwrite (&Options.ByteValue, 1, 1, OutFptr) != 1) {\r
       fclose (OutFptr);\r
-      fprintf (stdout, PROGRAM_NAME " ERROR: Failed to write to output file\n");\r
+      printf (" ERROR: Failed to write to output file\n");\r
       return EFI_DEVICE_ERROR;\r
     }\r
 \r
@@ -151,6 +155,23 @@ Returns:
   //\r
   Argv++;\r
   Argc--;\r
+  \r
+  if (Argc < 1) {\r
+    Usage();\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+  \r
+  if ((strcmp(Argv[0], "-h") == 0) || (strcmp(Argv[0], "--help") == 0) ||\r
+      (strcmp(Argv[0], "-?") == 0) || (strcmp(Argv[0], "/?") == 0)) {\r
+    Usage();\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+  \r
+  if ((strcmp(Argv[0], "-V") == 0) || (strcmp(Argv[0], "--version") == 0)) {\r
+    Version();\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
\r
   if (Argc < 2) {\r
     Usage ();\r
     return EFI_INVALID_PARAMETER;\r
@@ -176,12 +197,21 @@ Returns:
   if ((Argv[0][strlen (Argv[0]) - 1] == 'k') || (Argv[0][strlen (Argv[0]) - 1] == 'K')) {\r
     Multiplier = 1024;\r
   }\r
+  \r
+  //\r
+  // Check for negtive size\r
+  //\r
+  if (Argv[0][0] == '-') {\r
+    printf("ERROR: File size should be non-negtive.\n");\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+  \r
   //\r
   // Look for 0x prefix on file size\r
   //\r
   if ((Argv[0][0] == '0') && ((Argv[0][1] == 'x') || (Argv[0][1] == 'X'))) {\r
     if (sscanf (Argv[0], "%x", &Options->FileSize) != 1) {\r
-      fprintf (stdout, PROGRAM_NAME " ERROR: Invalid file size '%s'\n", Argv[0]);\r
+      printf ("ERROR: Invalid file size '%s'\n", Argv[0]);\r
       Usage ();\r
       return EFI_INVALID_PARAMETER;\r
     }\r
@@ -190,12 +220,12 @@ Returns:
     //\r
   } else {\r
     if (sscanf (Argv[0], "%d", &Options->FileSize) != 1) {\r
-      fprintf (stdout, PROGRAM_NAME " ERROR: Invalid file size '%s'\n", Argv[0]);\r
+      printf ("ERROR: Invalid file size '%s'\n", Argv[0]);\r
       Usage ();\r
       return EFI_INVALID_PARAMETER;\r
     }\r
   }\r
-\r
+  \r
   Options->FileSize *= Multiplier;\r
   //\r
   // Assume byte value of 0xff\r
@@ -203,6 +233,33 @@ Returns:
   Options->ByteValue = (INT8) (UINT8) 0xFF;\r
   return EFI_SUCCESS;\r
 }\r
+\r
+\r
+static\r
+void \r
+Version(\r
+  void\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Print out version information for this utility.\r
+\r
+Arguments:\r
+\r
+  None\r
+  \r
+Returns:\r
+\r
+  None\r
+  \r
+--*/ \r
+{\r
+  printf ("%s v%d.%d -EDK utility to create a pad file containing fixed data\n", UTILITY_NAME, UTILITY_MAJOR_VERSION, UTILITY_MINOR_VERSION);\r
+  printf ("Copyright (c) 1999-2006 Intel Corporation. All rights reserved.\n");\r
+}\r
+\r
 //\r
 // Print utility usage info\r
 //\r
@@ -226,22 +283,15 @@ Returns:
   GC_TODO: add return values\r
 \r
 --*/\r
-{\r
-  UINT32            Index;\r
-  static const INT8 *Text[] = {\r
-    " ",\r
-    "Usage:  "PROGRAM_NAME " OutFileName FileSize",\r
-    "  where:",\r
-    "    OutFileName is the name of the output file to generate",\r
-    "    FileSize is the size of the file to create",\r
-    "  Examples:",\r
-    "    "PROGRAM_NAME " OutFile.bin 32K",\r
-    "    "PROGRAM_NAME " OutFile.bin 0x1000",\r
-    " ",\r
-    NULL\r
-  };\r
-\r
-  for (Index = 0; Text[Index] != NULL; Index++) {\r
-    fprintf (stdout, "%s\n", Text[Index]);\r
-  }\r
-}\r
+{ \r
+  Version();\r
+  \r
+  printf ("\nUsage: %s OutFileName FileSize \n\\r
+   where: \n\\r
+      OutFileName is the name of the output file to generate \n\\r
+      FileSize is the size of the file to create \n\\r
+   Examples: \n\\r
+      %s OutFile.bin 32K \n\\r
+      %s OutFile.bin 0x1000 \n",UTILITY_NAME, UTILITY_NAME, UTILITY_NAME);\r
+} \r
+\r