Index: cgpt/cgpt.c |
diff --git a/cgpt/cgpt.c b/cgpt/cgpt.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d80bffea28eea3d46b289e49fdbd16c476cab56a |
--- /dev/null |
+++ b/cgpt/cgpt.c |
@@ -0,0 +1,75 @@ |
+/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ * |
+ * Utility for ChromeOS-specific GPT partitions, Please see corresponding .c |
+ * files for more details. |
+ */ |
+ |
+#include "cgpt.h" |
+ |
+#include <stdio.h> |
+#include <string.h> |
+#include <unistd.h> |
+ |
+ |
+const char* progname; |
+const char* command; |
+ |
+struct { |
+ const char *name; |
+ int (*fp)(int argc, char *argv[]); |
+ const char *comment; |
+} cmds[] = { |
+ {"create", cmd_create, "Create or reset GPT headers and tables"}, |
+ {"add", cmd_add, "Add, edit or remove a partition entry"}, |
+ {"show", cmd_show, "Show partition table and entries"}, |
+ {"repair", cmd_repair, "Repair damaged GPT headers and tables"}, |
+ {"boot", cmd_boot, "Edit the PMBR sector for legacy BIOSes"}, |
+}; |
+ |
+ |
+void Usage(void) { |
+ int i; |
+ |
+ printf("Usage: %s COMMAND [OPTIONS] DRIVE\n\n" |
+ "Supported COMMANDs:\n\n", |
+ progname); |
+ |
+ for (i = 0; i < sizeof(cmds)/sizeof(cmds[0]); ++i) { |
+ printf(" %-10s %s\n", cmds[i].name, cmds[i].comment); |
+ } |
+ printf("\nFor more detailed usage, use %s COMMAND -h\n\n", progname); |
+} |
+ |
+ |
+ |
+int main(int argc, char *argv[]) { |
+ int i; |
+ |
+ progname = strrchr(argv[0], '/'); |
+ if (progname) |
+ progname++; |
+ else |
+ progname = argv[0]; |
+ |
+ if (argc < 2) { |
+ Usage(); |
+ return CGPT_FAILED; |
+ } |
+ |
+ // increment optind now, so that getopt skips argv[0] in command function |
+ command = argv[optind++]; |
+ |
+ // Find the command to invoke. |
+ for (i = 0; command && i < sizeof(cmds)/sizeof(cmds[0]); ++i) { |
+ if (0 == strcmp(cmds[i].name, command)) { |
+ return cmds[i].fp(argc, argv); |
+ } |
+ } |
+ |
+ // Couldn't find the command. |
+ Usage(); |
+ |
+ return CGPT_FAILED; |
+} |