Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(73)

Side by Side Diff: firmware/lib/cgptlib/cgptlib_internal.c

Issue 2809037: Make vboot_reference build in MSVC command line environment. (Closed) Base URL: ssh://git@chromiumos-git/vboot_reference.git
Patch Set: Integrated trunk changes. Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « firmware/include/utility.h ('k') | firmware/lib/cgptlib/include/cgptlib_internal.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 5
6 #include "cgptlib.h" 6 #include "cgptlib.h"
7 #include "cgptlib_internal.h" 7 #include "cgptlib_internal.h"
8 #include "crc32.h" 8 #include "crc32.h"
9 #include "gpt.h" 9 #include "gpt.h"
10 #include "utility.h" 10 #include "utility.h"
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 return !Memcmp(&zero, (const uint8_t*)(&e->type), sizeof(zero)); 108 return !Memcmp(&zero, (const uint8_t*)(&e->type), sizeof(zero));
109 } 109 }
110 110
111 /* Returns non-zero if the entry is a Chrome OS kernel partition, else 0. */ 111 /* Returns non-zero if the entry is a Chrome OS kernel partition, else 0. */
112 int IsKernelEntry(const GptEntry* e) { 112 int IsKernelEntry(const GptEntry* e) {
113 static Guid chromeos_kernel = GPT_ENT_TYPE_CHROMEOS_KERNEL; 113 static Guid chromeos_kernel = GPT_ENT_TYPE_CHROMEOS_KERNEL;
114 return !Memcmp(&e->type, &chromeos_kernel, sizeof(Guid)); 114 return !Memcmp(&e->type, &chromeos_kernel, sizeof(Guid));
115 } 115 }
116 116
117 117
118 int CheckEntries(GptEntry* entries, GptHeader* h, uint64_t drive_sectors) { 118 int CheckEntries(GptEntry* entries, GptHeader* h) {
119 119
120 GptEntry* entry; 120 GptEntry* entry;
121 uint32_t crc32; 121 uint32_t crc32;
122 uint32_t i; 122 uint32_t i;
123 123
124 /* Check CRC before examining entries. */ 124 /* Check CRC before examining entries. */
125 crc32 = Crc32((const uint8_t *)entries, 125 crc32 = Crc32((const uint8_t *)entries,
126 h->size_of_entry * h->number_of_entries); 126 h->size_of_entry * h->number_of_entries);
127 if (crc32 != h->entries_crc32) 127 if (crc32 != h->entries_crc32)
128 return 1; 128 return 1;
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 } 220 }
221 221
222 if (!gpt->valid_headers) 222 if (!gpt->valid_headers)
223 return GPT_ERROR_INVALID_HEADERS; 223 return GPT_ERROR_INVALID_HEADERS;
224 224
225 /* Checks if entries are valid. 225 /* Checks if entries are valid.
226 * 226 *
227 * Note that we use the same header in both checks. This way we'll 227 * Note that we use the same header in both checks. This way we'll
228 * catch the case where (header1,entries1) and (header2,entries2) 228 * catch the case where (header1,entries1) and (header2,entries2)
229 * are both valid, but (entries1 != entries2). */ 229 * are both valid, but (entries1 != entries2). */
230 if (0 == CheckEntries(entries1, goodhdr, gpt->drive_sectors)) 230 if (0 == CheckEntries(entries1, goodhdr))
231 gpt->valid_entries |= MASK_PRIMARY; 231 gpt->valid_entries |= MASK_PRIMARY;
232 if (0 == CheckEntries(entries2, goodhdr, gpt->drive_sectors)) 232 if (0 == CheckEntries(entries2, goodhdr))
233 gpt->valid_entries |= MASK_SECONDARY; 233 gpt->valid_entries |= MASK_SECONDARY;
234 234
235 /* If both headers are good but neither entries were good, check the 235 /* If both headers are good but neither entries were good, check the
236 * entries with the secondary header. */ 236 * entries with the secondary header. */
237 if (MASK_BOTH == gpt->valid_headers && !gpt->valid_entries) { 237 if (MASK_BOTH == gpt->valid_headers && !gpt->valid_entries) {
238 if (0 == CheckEntries(entries1, header2, gpt->drive_sectors)) 238 if (0 == CheckEntries(entries1, header2))
239 gpt->valid_entries |= MASK_PRIMARY; 239 gpt->valid_entries |= MASK_PRIMARY;
240 if (0 == CheckEntries(entries2, header2, gpt->drive_sectors)) 240 if (0 == CheckEntries(entries2, header2))
241 gpt->valid_entries |= MASK_SECONDARY; 241 gpt->valid_entries |= MASK_SECONDARY;
242 if (gpt->valid_entries) { 242 if (gpt->valid_entries) {
243 /* Sure enough, header2 had a good CRC for one of the entries. Mark 243 /* Sure enough, header2 had a good CRC for one of the entries. Mark
244 * header1 invalid, so we'll update its entries CRC. */ 244 * header1 invalid, so we'll update its entries CRC. */
245 gpt->valid_headers &= ~MASK_PRIMARY; 245 gpt->valid_headers &= ~MASK_PRIMARY;
246 goodhdr = header2; 246 goodhdr = header2;
247 } 247 }
248 } 248 }
249 249
250 if (!gpt->valid_entries) 250 if (!gpt->valid_entries)
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 e->attrs.fields.gpt_att |= (priority << CGPT_ATTRIBUTE_PRIORITY_OFFSET) & 339 e->attrs.fields.gpt_att |= (priority << CGPT_ATTRIBUTE_PRIORITY_OFFSET) &
340 CGPT_ATTRIBUTE_PRIORITY_MASK; 340 CGPT_ATTRIBUTE_PRIORITY_MASK;
341 } 341 }
342 342
343 343
344 void SetEntryTries(GptEntry* e, int tries) { 344 void SetEntryTries(GptEntry* e, int tries) {
345 e->attrs.fields.gpt_att &= ~CGPT_ATTRIBUTE_TRIES_MASK; 345 e->attrs.fields.gpt_att &= ~CGPT_ATTRIBUTE_TRIES_MASK;
346 e->attrs.fields.gpt_att |= (tries << CGPT_ATTRIBUTE_TRIES_OFFSET) & 346 e->attrs.fields.gpt_att |= (tries << CGPT_ATTRIBUTE_TRIES_OFFSET) &
347 CGPT_ATTRIBUTE_TRIES_MASK; 347 CGPT_ATTRIBUTE_TRIES_MASK;
348 } 348 }
OLDNEW
« no previous file with comments | « firmware/include/utility.h ('k') | firmware/lib/cgptlib/include/cgptlib_internal.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698