xref: /aosp_15_r20/external/vboot_reference/cgpt/cgpt_repair.c (revision 8617a60d3594060b7ecbd21bc622a7c14f3cf2bc)
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 Worker int 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