Nearly complete rewrite of cgpt tool.

This fixes a number of bugs, adds a bunch of commands, and essentially makes
cgpt ready to use as a replacement for gpt. Still to do is to add commands
and options that will let it generated intentionally bad partitions, for use
in testing.

Review URL: http://codereview.chromium.org/2719008
diff --git a/tests/cgptlib_test.c b/tests/cgptlib_test.c
index 1ab5342..f016b21 100644
--- a/tests/cgptlib_test.c
+++ b/tests/cgptlib_test.c
@@ -136,8 +136,8 @@
   Memcpy(header->signature, GPT_HEADER_SIGNATURE,
          sizeof(GPT_HEADER_SIGNATURE));
   header->revision = GPT_HEADER_REVISION;
-  header->size = sizeof(GptHeader) - sizeof(header->padding);
-  header->reserved = 0;
+  header->size = sizeof(GptHeader);
+  header->reserved_zero = 0;
   header->my_lba = 1;
   header->alternate_lba = DEFAULT_DRIVE_SECTORS - 1;
   header->first_usable_lba = 34;
@@ -157,7 +157,6 @@
   Memcpy(&entries[3].type, &chromeos_kernel, sizeof(chromeos_kernel));
   entries[3].starting_lba = 334;
   entries[3].ending_lba = 430;
-  Memset(header->padding, 0, sizeof(header->padding));
 
   /* build secondary */
   header2 = (GptHeader*)gpt->secondary_header;
@@ -355,8 +354,8 @@
   GptHeader* h2 = (GptHeader*)gpt->secondary_header;
 
   BuildTestGptData(gpt);
-  h1->reserved ^= 0x12345678;  /* whatever random */
-  h2->reserved ^= 0x12345678;  /* whatever random */
+  h1->reserved_zero ^= 0x12345678;  /* whatever random */
+  h2->reserved_zero ^= 0x12345678;  /* whatever random */
   RefreshCrc32(gpt);
   EXPECT(1 == CheckHeader(h1, 0, gpt->drive_sectors));
   EXPECT(1 == CheckHeader(h2, 1, gpt->drive_sectors));