123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- /*
- * Code for setting up command line flags like `./u-boot --help`
- *
- * Copyright (c) 2011 The Chromium OS Authors.
- *
- * Licensed under the GPL-2 or later.
- */
- #ifndef __SANDBOX_GETOPT_H
- #define __SANDBOX_GETOPT_H
- struct sandbox_state;
- /*
- * Internal structure for storing details about the flag.
- * Most people should not have to dig around in this as
- * it only gets parsed by the core sandbox code. End
- * consumer code should focus on the macros below and
- * the callback function.
- */
- struct sandbox_cmdline_option {
- /* The long flag name: "help" for "--help" */
- const char *flag;
- /* The (optional) short flag name: "h" for "-h" */
- int flag_short;
- /* The help string shown to the user when processing --help */
- const char *help;
- /* Whether this flag takes an argument */
- int has_arg;
- /* Callback into the end consumer code with the option */
- int (*callback)(struct sandbox_state *state, const char *opt);
- };
- /*
- * Internal macro to expand the lower macros into the necessary
- * magic junk that makes this all work.
- */
- #define _SANDBOX_CMDLINE_OPT(f, s, ha, h) \
- static struct sandbox_cmdline_option sandbox_cmdline_option_##f = { \
- .flag = #f, \
- .flag_short = s, \
- .help = h, \
- .has_arg = ha, \
- .callback = sandbox_cmdline_cb_##f, \
- }; \
- /* Ppointer to the struct in a special section for the linker script */ \
- static __attribute__((section(".u_boot_sandbox_getopt"), used)) \
- struct sandbox_cmdline_option \
- *sandbox_cmdline_option_##f##_ptr = \
- &sandbox_cmdline_option_##f
- /**
- * Macros for end code to declare new command line flags.
- *
- * @param f The long flag name e.g. help
- * @param ha Does the flag have an argument e.g. 0/1
- * @param h The help string displayed when showing --help
- *
- * This invocation:
- * SANDBOX_CMDLINE_OPT(foo, 0, "The foo arg");
- * Will create a new flag named "--foo" (no short option) that takes
- * no argument. If the user specifies "--foo", then the callback func
- * sandbox_cmdline_cb_foo() will automatically be called.
- */
- #define SANDBOX_CMDLINE_OPT(f, ha, h) _SANDBOX_CMDLINE_OPT(f, 0, ha, h)
- /*
- * Same as above, but @s is used to specify a short flag e.g.
- * SANDBOX_CMDLINE_OPT(foo, 'f', 0, "The foo arg");
- */
- #define SANDBOX_CMDLINE_OPT_SHORT(f, s, ha, h) _SANDBOX_CMDLINE_OPT(f, s, ha, h)
- #endif
|