| // 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 "installer/chromeos_install_config.h" |
| |
| #include <stdio.h> |
| |
| #include "installer/cgpt_manager.h" |
| |
| using std::string; |
| |
| bool StrToBiosType(string name, BiosType* bios_type) { |
| if (name == "secure") { |
| *bios_type = kBiosTypeSecure; |
| } else if (name == "uboot") { |
| *bios_type = kBiosTypeUBoot; |
| } else if (name == "legacy") { |
| *bios_type = kBiosTypeLegacy; |
| } else if (name == "efi") { |
| *bios_type = kBiosTypeEFI; |
| } else { |
| printf("Bios type %s is not one of secure, legacy, efi, or uboot\n", |
| name.c_str()); |
| return false; |
| } |
| |
| return true; |
| } |
| |
| // TODO(jaysri): Unduplicate these methods. |
| // |
| // This #define and this function are copied from cgpt.h and |
| // cgpt_common.c because they aren't currently exported in a |
| // way we can use. |
| // |
| // chromium-os:29457 covers exporting these methods. We should |
| // use the exported ones as soon as they are available. |
| #define GUID_STRLEN 37 |
| void GuidToStr(const Guid *guid, char *str, unsigned int buflen) { |
| snprintf(str, buflen, |
| "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X", |
| le32toh(guid->u.Uuid.time_low), |
| le16toh(guid->u.Uuid.time_mid), |
| le16toh(guid->u.Uuid.time_high_and_version), |
| guid->u.Uuid.clock_seq_high_and_reserved, |
| guid->u.Uuid.clock_seq_low, |
| guid->u.Uuid.node[0], guid->u.Uuid.node[1], |
| guid->u.Uuid.node[2], guid->u.Uuid.node[3], |
| guid->u.Uuid.node[4], guid->u.Uuid.node[5]); |
| } |
| |
| string Partition::uuid() const { |
| CgptManager cgpt; |
| |
| if (cgpt.Initialize(base_device()) != kCgptSuccess) { |
| printf("CgptManager failed to initialize for %s", base_device().c_str()); |
| return ""; |
| } |
| |
| Guid guid; |
| |
| if (cgpt.GetPartitionUniqueId(number(), &guid) != kCgptSuccess) { |
| printf("CgptManager failed to get guid for %d", number()); |
| return ""; |
| } |
| |
| char guid_str[GUID_STRLEN]; |
| GuidToStr(&guid, guid_str, GUID_STRLEN); |
| return guid_str; |
| } |