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

Side by Side Diff: cgpt/cmd_add.c

Issue 5115002: Fixing the bug of CGPT when primary entry table is invalid. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/vboot_reference.git
Patch Set: Created 10 years, 1 month 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 | Annotate | Revision Log
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 #include "cgpt.h" 5 #include "cgpt.h"
6 6
7 #include <getopt.h> 7 #include <getopt.h>
8 #include <stdio.h> 8 #include <stdio.h>
9 #include <stdlib.h> 9 #include <stdlib.h>
10 #include <string.h> 10 #include <string.h>
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 191
192 if (CGPT_OK != DriveOpen(argv[optind], &drive)) 192 if (CGPT_OK != DriveOpen(argv[optind], &drive))
193 return CGPT_FAILED; 193 return CGPT_FAILED;
194 194
195 if (GPT_SUCCESS != (gpt_retval = GptSanityCheck(&drive.gpt))) { 195 if (GPT_SUCCESS != (gpt_retval = GptSanityCheck(&drive.gpt))) {
196 Error("GptSanityCheck() returned %d: %s\n", 196 Error("GptSanityCheck() returned %d: %s\n",
197 gpt_retval, GptError(gpt_retval)); 197 gpt_retval, GptError(gpt_retval));
198 return CGPT_FAILED; 198 return CGPT_FAILED;
199 } 199 }
200 200
201 if ((drive.gpt.valid_headers != MASK_BOTH) ||
Hung-Te 2010/11/17 10:37:04 it looks a little weird for me to compare a variab
Louis 2010/11/18 01:51:29 Good catch. Modified as: (valid_header & MASK_BO
202 (drive.gpt.valid_entries != MASK_BOTH)) {
203 Error("one of the GPT header/entries is invalid.\n"
204 "please run 'cgpt repair' before adding anything.\n");
205 return CGPT_FAILED;
206 }
207
201 uint32_t max_part = GetNumberOfEntries(&drive.gpt); 208 uint32_t max_part = GetNumberOfEntries(&drive.gpt);
202 if (partition) { 209 if (partition) {
203 if (partition > max_part) { 210 if (partition > max_part) {
204 Error("invalid partition number: %d\n", partition); 211 Error("invalid partition number: %d\n", partition);
205 goto bad; 212 goto bad;
206 } 213 }
207 index = partition - 1; 214 index = partition - 1;
208 entry = GetEntry(&drive.gpt, PRIMARY, index); 215 entry = GetEntry(&drive.gpt, PRIMARY, index);
209 } else { 216 } else {
210 // find next empty partition 217 // find next empty partition
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 UpdateCrc(&drive.gpt); 273 UpdateCrc(&drive.gpt);
267 274
268 275
269 // Write it all out 276 // Write it all out
270 return DriveClose(&drive, 1); 277 return DriveClose(&drive, 1);
271 278
272 bad: 279 bad:
273 (void) DriveClose(&drive, 0); 280 (void) DriveClose(&drive, 0);
274 return CGPT_FAILED; 281 return CGPT_FAILED;
275 } 282 }
OLDNEW
« cgpt/cgpt_common.c ('K') | « cgpt/cgpt_common.c ('k') | cgpt/cmd_boot.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698