Home | History | Annotate | Download | only in cgpt
      1 // Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include <string.h>
      6 
      7 #include "cgpt.h"
      8 #include "cgptlib_internal.h"
      9 #include "vboot_host.h"
     10 
     11 int CgptLegacy(CgptLegacyParams *params) {
     12   struct drive drive;
     13   GptHeader *h1, *h2;
     14 
     15   if (params == NULL)
     16     return CGPT_FAILED;
     17 
     18   if (CGPT_OK != DriveOpen(params->drive_name, &drive, O_RDWR,
     19                            params->drive_size))
     20     return CGPT_FAILED;
     21 
     22   h1 = (GptHeader *)drive.gpt.primary_header;
     23   h2 = (GptHeader *)drive.gpt.secondary_header;
     24   if (params->efipart) {
     25     memcpy(h1->signature, GPT_HEADER_SIGNATURE, GPT_HEADER_SIGNATURE_SIZE);
     26     memcpy(h2->signature, GPT_HEADER_SIGNATURE, GPT_HEADER_SIGNATURE_SIZE);
     27     RepairEntries(&drive.gpt, MASK_SECONDARY);
     28     drive.gpt.modified |= (GPT_MODIFIED_HEADER1 | GPT_MODIFIED_ENTRIES1 |
     29                            GPT_MODIFIED_HEADER2);
     30   } else {
     31     memcpy(h1->signature, GPT_HEADER_SIGNATURE2, GPT_HEADER_SIGNATURE_SIZE);
     32     memcpy(h2->signature, GPT_HEADER_SIGNATURE2, GPT_HEADER_SIGNATURE_SIZE);
     33     memset(drive.gpt.primary_entries, 0, drive.gpt.sector_bytes);
     34     drive.gpt.modified |= (GPT_MODIFIED_HEADER1 | GPT_MODIFIED_ENTRIES1 |
     35                            GPT_MODIFIED_HEADER2);
     36   }
     37 
     38   UpdateCrc(&drive.gpt);
     39 
     40   // Write it all out
     41   return DriveClose(&drive, 1);
     42 }
     43