OLD | NEW |
1 /* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 /* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
2 * Use of this source code is governed by a BSD-style license that can be | 2 * Use of this source code is governed by a BSD-style license that can be |
3 * found in the LICENSE file. | 3 * found in the LICENSE file. |
4 * | 4 * |
5 * Utility for ChromeOS-specific GPT partitions, Please see corresponding .c | 5 * Utility for ChromeOS-specific GPT partitions, Please see corresponding .c |
6 * files for more details. | 6 * files for more details. |
7 */ | 7 */ |
8 /* To compile on host without compatility to BSD, we include | 8 /* To compile on host without compatility to BSD, we include |
9 * endian.h under chroot. */ | 9 * endian.h under chroot. */ |
10 #define _BSD_SOURCE | 10 #define _BSD_SOURCE |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 utf8[s8idx++] = 0xe0 | (utfchar >> 12); | 135 utf8[s8idx++] = 0xe0 | (utfchar >> 12); |
136 utf8[s8idx++] = 0x80 | ((utfchar >> 6) & 0x3f); | 136 utf8[s8idx++] = 0x80 | ((utfchar >> 6) & 0x3f); |
137 utf8[s8idx++] = 0x80 | (utfchar & 0x3f); | 137 utf8[s8idx++] = 0x80 | (utfchar & 0x3f); |
138 } else if (utfchar < 0x200000) { | 138 } else if (utfchar < 0x200000) { |
139 utf8[s8idx++] = 0xf0 | (utfchar >> 18); | 139 utf8[s8idx++] = 0xf0 | (utfchar >> 18); |
140 utf8[s8idx++] = 0x80 | ((utfchar >> 12) & 0x3f); | 140 utf8[s8idx++] = 0x80 | ((utfchar >> 12) & 0x3f); |
141 utf8[s8idx++] = 0x80 | ((utfchar >> 6) & 0x3f); | 141 utf8[s8idx++] = 0x80 | ((utfchar >> 6) & 0x3f); |
142 utf8[s8idx++] = 0x80 | (utfchar & 0x3f); | 142 utf8[s8idx++] = 0x80 | (utfchar & 0x3f); |
143 } | 143 } |
144 } | 144 } |
| 145 utf8[s8idx++] = 0; |
145 } | 146 } |
146 | 147 |
147 /* Convert UTF8 string to UTF16. Rewritten from gpt utility. | 148 /* Convert UTF8 string to UTF16. Rewritten from gpt utility. |
148 * Caller must prepare enough space for UTF16. The conservative estimation is: | 149 * Caller must prepare enough space for UTF16. The conservative estimation is: |
149 * | 150 * |
150 * utf16 bytecount = bytecount(utf8) / 3 * 4 | 151 * utf16 bytecount = bytecount(utf8) / 3 * 4 |
151 */ | 152 */ |
152 void UTF8ToUTF16(const uint8_t *utf8, uint16_t *utf16) | 153 void UTF8ToUTF16(const uint8_t *utf8, uint16_t *utf16) |
153 { | 154 { |
154 size_t s16idx, s8idx, s8len; | 155 size_t s16idx, s8idx, s8len; |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 if (s16idx < SIZEOF_GPTENTRY_NAME) | 203 if (s16idx < SIZEOF_GPTENTRY_NAME) |
203 utf16[s16idx++] = 0; | 204 utf16[s16idx++] = 0; |
204 } | 205 } |
205 | 206 |
206 struct { | 207 struct { |
207 Guid type; | 208 Guid type; |
208 char *name; | 209 char *name; |
209 char *description; | 210 char *description; |
210 } supported_types[] = { | 211 } supported_types[] = { |
211 {GPT_ENT_TYPE_UNUSED, "unused", "Unused partition"}, | 212 {GPT_ENT_TYPE_UNUSED, "unused", "Unused partition"}, |
212 {GPT_ENT_TYPE_EFI, "efi", "EFI partition"}, | 213 {GPT_ENT_TYPE_EFI, "efi", "EFI System Partition"}, |
213 {GPT_ENT_TYPE_CHROMEOS_KERNEL, "croskern", "ChromeOS kernel"}, | 214 {GPT_ENT_TYPE_CHROMEOS_KERNEL, "croskern", "ChromeOS kernel"}, |
214 {GPT_ENT_TYPE_CHROMEOS_ROOTFS, "crosroot", "ChromeOS rootfs"}, | 215 {GPT_ENT_TYPE_CHROMEOS_ROOTFS, "crosroot", "ChromeOS rootfs"}, |
215 {GPT_ENT_TYPE_CHROMEOS_RESERVED, "crosresv", "ChromeOS reserved"}, | 216 {GPT_ENT_TYPE_CHROMEOS_RESERVED, "crosresv", "ChromeOS reserved"}, |
| 217 {GPT_ENT_TYPE_LINUX_DATA, "data", "Linux data"}, |
216 }; | 218 }; |
217 | 219 |
218 /* Resolves human-readable GPT type. | 220 /* Resolves human-readable GPT type. |
219 * Returns CGPT_OK if found. | 221 * Returns CGPT_OK if found. |
220 * Returns CGPT_FAILED if no known type found. */ | 222 * Returns CGPT_FAILED if no known type found. */ |
221 int ResolveType(const Guid *type, char *buf) { | 223 int ResolveType(const Guid *type, char *buf) { |
222 int i; | 224 int i; |
223 for (i = 0; i < ARRAY_COUNT(supported_types); ++i) { | 225 for (i = 0; i < ARRAY_COUNT(supported_types); ++i) { |
224 if (!Memcmp(type, &supported_types[i].type, sizeof(Guid))) { | 226 if (!Memcmp(type, &supported_types[i].type, sizeof(Guid))) { |
225 strcpy(buf, supported_types[i].description); | 227 strcpy(buf, supported_types[i].description); |
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
437 | 439 |
438 drive->inited = 0; | 440 drive->inited = 0; |
439 return CGPT_OK; | 441 return CGPT_OK; |
440 } | 442 } |
441 | 443 |
442 int main(int argc, char *argv[]) { | 444 int main(int argc, char *argv[]) { |
443 char *cmd; | 445 char *cmd; |
444 int i; | 446 int i; |
445 | 447 |
446 progname = argv[0]; | 448 progname = argv[0]; |
447 printf("Copyright (c) 2010 The Chromium OS Authors. All rights reserved.\n"); | |
448 cmd = argv[optind++]; | 449 cmd = argv[optind++]; |
449 for (i = 0; i < sizeof(cmds)/sizeof(cmds[0]); ++i) { | 450 for (i = 0; i < sizeof(cmds)/sizeof(cmds[0]); ++i) { |
450 if (cmd && !strcmp(cmds[i].name, cmd)) | 451 if (cmd && !strcmp(cmds[i].name, cmd)) |
451 return cmds[i].fp(argc, argv); | 452 return cmds[i].fp(argc, argv); |
452 } | 453 } |
453 | 454 |
454 Usage(0); | 455 Usage(0); |
455 return CGPT_FAILED; | 456 return CGPT_FAILED; |
456 } | 457 } |
OLD | NEW |