/* 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 #include #include 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; }