Index: src/platform/vboot_reference/utility/cgpt/cgpt.h |
diff --git a/src/platform/vboot_reference/utility/cgpt/cgpt.h b/src/platform/vboot_reference/utility/cgpt/cgpt.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..70d8cf593be321555019681720730921fac58bec |
--- /dev/null |
+++ b/src/platform/vboot_reference/utility/cgpt/cgpt.h |
@@ -0,0 +1,121 @@ |
+/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ * |
+ * Header file for cgpt. |
+ */ |
+#ifndef VBOOT_REFERENCE_UTILITY_CGPT_CGPT_H_ |
+#define VBOOT_REFERENCE_UTILITY_CGPT_CGPT_H_ |
+ |
+#include <getopt.h> |
+#include <stdint.h> |
+#include "cgptlib.h" |
+ |
+enum { |
+ CGPT_OK = 0, |
+ CGPT_FAILED, /* generic error */ |
+}; |
+ |
+#define NOT_INITED (-1) /* to indicated a signed integer is not initialed. */ |
+ |
+#define ARRAY_COUNT(array) (sizeof(array)/sizeof((array)[0])) |
+ |
+/* 'struct option' of getopt_long() is not enough for our usage. |
+ * Therefore, we define the extra information to make option parsing |
+ * more organizable. |
+ * Note that please make sure every entry in struct option is mapped into an |
+ * individual entry in this struct. */ |
+struct option_details { |
+ char *comment; |
+ |
+ /* If has_arg is 'required_argument', 'validator' is called to check whether |
+ * the 'argument' is valid or not. Once the argument is valid, the value is |
+ * stored in 'parsed'. |
+ * |
+ * If has_arg is 'no_argument', 'validator' is called to load 'valid_range' |
+ * into 'parsed' ('argument' is 0 in this case). Since getopt_long() only |
+ * supports integer type for 'flag' and 'val', this can support for any type. |
+ * |
+ * If has_arg is 'optional_argument', like 'required_argument', 'validator' is |
+ * called to check if 'argument' is valid or not. 'argument' indicates if |
+ * argument is present or not. |
+ * |
+ * 'validator' returns CGPT_OK if argument is valid; otherwise CGPT_FAILED |
+ * if invalid. */ |
+ int (*validator)(const char *argument, void *valid_range, void *parsed); |
+ void *valid_range; /* The structure passed to validator. */ |
+ void *parsed; /* The structure passed to validator. */ |
+}; |
+ |
+/* This is a special 'validator'. It assists those options without an argument, |
+ * i.e. help, to indicate the option is present. */ |
+int AssignTrue(const char *argument, void *pointer, void *integer); |
+ |
+struct number_range { |
+ int max; |
+ int min; |
+}; |
+ |
+/* Validator function. Returns 1 if 'argument' is between 'max' and 'min' |
+ * in 'valid_range'. */ |
+int InNumberRange(const char *argument, void *valid_range, void *parsed); |
+ |
+void ShowOptions(const struct option *opts, |
+ const struct option_details *details, |
+ const int num); |
+ |
+/* Handles all options from given argc and argv. This function supports both |
+ * short and long options. |
+ * |
+ * Assumptions: |
+ * 1. every short option has a corresponding long option and the short option |
+ * is equal to 'val' of that long option. |
+ * 2. every entry in 'options' has a corresponding entry in 'details'. |
+ * One by one and in order. |
+ * |
+ * Returns CGPT_OK if given options in argv are good, otherwise CGPT_FAILED. |
+ * Note that the global variable 'optind' points to next non-option after |
+ * this function returns. |
+ */ |
+int HandleOptions(const int argc, |
+ char *const *argv, |
+ const char *short_option, |
+ const int option_count, |
+ const struct option *options, |
+ const struct option_details *details); |
+ |
+struct drive; |
+int OpenDriveInLastArgument(const int argc, |
+ char *const *argv, |
+ struct drive *drive); |
+ |
+/* Describes the drive storing the GPT. */ |
+struct drive { |
+ int inited; /* indicated if this structure is valid */ |
+ int fd; /* file descriptor */ |
+ uint64_t size; /* total size (in bytes) */ |
+ GptData gpt; |
+}; |
+ |
+extern const char* progname; |
+ |
+/* Given a hard drive path, this function loads GPT sectors from that drive, |
+ * and fills 'drive' structure. All memory allocated in drive_open() will be |
+ * freed at drive_close(). |
+ * |
+ * If 'drive_path' starts with '/', it is treated as absolute path. |
+ * If 'drive_path' starts with '.', it is treated as relative path. |
+ * Otherwise, it will be prepended with '/dev/' to comply with gpt. |
+ * |
+ * Returns CGPT_FAILED if any error happens. |
+ * Returns CGPT_OK if success and information are stored in 'drive'. |
+ */ |
+int DriveOpen(const char *drive_path, struct drive *drive); |
+int DriveClose(struct drive *drive); |
+ |
+/* Function declarations for commands. |
+ * The return value of these functions is passed to main()'s exit value. */ |
+int CgptAttribute(int argc, char *argv[]); |
+int CgptShow(int argc, char *argv[]); |
+ |
+#endif /* VBOOT_REFERENCE_UTILITY_CGPT_CGPT_H_ */ |