|  | /* | 
|  | * 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 sb_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 _SB_CMDLINE_OPT(f, s, ha, h) \ | 
|  | static struct sb_cmdline_option sb_cmdline_option_##f = { \ | 
|  | .flag = #f, \ | 
|  | .flag_short = s, \ | 
|  | .help = h, \ | 
|  | .has_arg = ha, \ | 
|  | .callback = sb_cmdline_cb_##f, \ | 
|  | }; \ | 
|  | /* Ppointer to the struct in a special section for the linker script */ \ | 
|  | static __attribute__((section(".u_boot_sandbox_getopt"), used)) \ | 
|  | struct sb_cmdline_option *sb_cmdline_option_##f##_ptr = \ | 
|  | &sb_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: | 
|  | *   SB_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 | 
|  | * sb_cmdline_cb_foo() will automatically be called. | 
|  | */ | 
|  | #define SB_CMDLINE_OPT(f, ha, h) _SB_CMDLINE_OPT(f, 0, ha, h) | 
|  | /* | 
|  | * Same as above, but @s is used to specify a short flag e.g. | 
|  | *   SB_CMDLINE_OPT(foo, 'f', 0, "The foo arg"); | 
|  | */ | 
|  | #define SB_CMDLINE_OPT_SHORT(f, s, ha, h) _SB_CMDLINE_OPT(f, s, ha, h) | 
|  |  | 
|  | #endif |