1*8617a60dSAndroid Build Coastguard Worker /* Copyright 2012 The ChromiumOS Authors 2*8617a60dSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 3*8617a60dSAndroid Build Coastguard Worker * found in the LICENSE file. 4*8617a60dSAndroid Build Coastguard Worker */ 5*8617a60dSAndroid Build Coastguard Worker 6*8617a60dSAndroid Build Coastguard Worker #include <string.h> 7*8617a60dSAndroid Build Coastguard Worker 8*8617a60dSAndroid Build Coastguard Worker #include "cgpt.h" 9*8617a60dSAndroid Build Coastguard Worker #include "cgptlib_internal.h" 10*8617a60dSAndroid Build Coastguard Worker #include "vboot_host.h" 11*8617a60dSAndroid Build Coastguard Worker CgptRepair(CgptRepairParams * params)12*8617a60dSAndroid Build Coastguard Workerint CgptRepair(CgptRepairParams *params) { 13*8617a60dSAndroid Build Coastguard Worker struct drive drive; 14*8617a60dSAndroid Build Coastguard Worker 15*8617a60dSAndroid Build Coastguard Worker if (params == NULL) 16*8617a60dSAndroid Build Coastguard Worker return CGPT_FAILED; 17*8617a60dSAndroid Build Coastguard Worker 18*8617a60dSAndroid Build Coastguard Worker if (CGPT_OK != DriveOpen(params->drive_name, &drive, O_RDWR, 19*8617a60dSAndroid Build Coastguard Worker params->drive_size)) 20*8617a60dSAndroid Build Coastguard Worker return CGPT_FAILED; 21*8617a60dSAndroid Build Coastguard Worker 22*8617a60dSAndroid Build Coastguard Worker int gpt_retval = GptValidityCheck(&drive.gpt); 23*8617a60dSAndroid Build Coastguard Worker if (params->verbose) 24*8617a60dSAndroid Build Coastguard Worker printf("GptValidityCheck() returned %d: %s\n", 25*8617a60dSAndroid Build Coastguard Worker gpt_retval, GptError(gpt_retval)); 26*8617a60dSAndroid Build Coastguard Worker 27*8617a60dSAndroid Build Coastguard Worker GptRepair(&drive.gpt); 28*8617a60dSAndroid Build Coastguard Worker if (drive.gpt.modified & GPT_MODIFIED_HEADER1) 29*8617a60dSAndroid Build Coastguard Worker printf("Primary Header is updated.\n"); 30*8617a60dSAndroid Build Coastguard Worker if (drive.gpt.modified & GPT_MODIFIED_ENTRIES1) 31*8617a60dSAndroid Build Coastguard Worker printf("Primary Entries is updated.\n"); 32*8617a60dSAndroid Build Coastguard Worker if (drive.gpt.modified & GPT_MODIFIED_ENTRIES2) 33*8617a60dSAndroid Build Coastguard Worker printf("Secondary Entries is updated.\n"); 34*8617a60dSAndroid Build Coastguard Worker if (drive.gpt.modified & GPT_MODIFIED_HEADER2) 35*8617a60dSAndroid Build Coastguard Worker printf("Secondary Header is updated.\n"); 36*8617a60dSAndroid Build Coastguard Worker 37*8617a60dSAndroid Build Coastguard Worker return DriveClose(&drive, 1); 38*8617a60dSAndroid Build Coastguard Worker } 39