// 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 <getopt.h>
#include <string.h>

#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(&params, 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(&params);
}
