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

Unified Diff: src/platform/vboot_reference/utility/cgpt/cgpt.h

Issue 2082015: add cgpt framework and attribute support. (Closed) Base URL: ssh://git@chromiumos-git/chromeos
Patch Set: Created 10 years, 7 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 side-by-side diff with in-line comments
Download patch
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_ */

Powered by Google App Engine
This is Rietveld 408576698