/* Copyright (c) 2012 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. */ #include #include #include "cgpt.h" #include "vboot_host.h" extern const char* progname; static void Usage(void) { printf("\nUsage: %s legacy [OPTIONS] DRIVE\n\n" "Switch GPT header signature to \"CHROMEOS\".\n\n" "Options:\n" " -D NUM Size (in bytes) of the disk where partitions reside;\n" " default 0, meaning partitions and GPT structs are\n" " both on DRIVE\n" " -e Switch GPT header signature back to \"EFI PART\"\n" " -p Switch primary GPT header signature to \"IGNOREME\"\n" "\n", progname); } int cmd_legacy(int argc, char *argv[]) { CgptLegacyParams params; memset(¶ms, 0, sizeof(params)); int c; char* e = 0; int errorcnt = 0; opterr = 0; // quiet, you while ((c=getopt(argc, argv, ":hepD:")) != -1) { switch (c) { case 'D': params.drive_size = strtoull(optarg, &e, 0); errorcnt += check_int_parse(c, e); break; case 'e': if (params.mode) { Error("Incompatible flags, pick either -e or -p\n"); errorcnt++; } params.mode = CGPT_LEGACY_MODE_EFIPART; break; case 'p': if (params.mode) { Error("Incompatible flags, pick either -e or -p\n"); errorcnt++; } params.mode = CGPT_LEGACY_MODE_IGNORE_PRIMARY; break; case 'h': Usage(); return CGPT_OK; case '?': Error("unrecognized option: -%c\n", optopt); errorcnt++; break; case ':': Error("missing argument to -%c\n", optopt); errorcnt++; break; default: errorcnt++; break; } } if (errorcnt) { Usage(); return CGPT_FAILED; } if (optind >= argc) { Usage(); return CGPT_FAILED; } params.drive_name = argv[optind]; return CgptLegacy(¶ms); }