2012-02-15 23:51:16 +00:00
|
|
|
/*
|
|
|
|
* 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.
|
|
|
|
*/
|
2013-12-03 23:43:23 +00:00
|
|
|
struct sandbox_cmdline_option {
|
2012-02-15 23:51:16 +00:00
|
|
|
/* 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.
|
|
|
|
*/
|
2013-12-03 23:43:23 +00:00
|
|
|
#define _SANDBOX_CMDLINE_OPT(f, s, ha, h) \
|
|
|
|
static struct sandbox_cmdline_option sandbox_cmdline_option_##f = { \
|
2012-02-15 23:51:16 +00:00
|
|
|
.flag = #f, \
|
|
|
|
.flag_short = s, \
|
|
|
|
.help = h, \
|
|
|
|
.has_arg = ha, \
|
2013-12-03 23:43:23 +00:00
|
|
|
.callback = sandbox_cmdline_cb_##f, \
|
2012-02-15 23:51:16 +00:00
|
|
|
}; \
|
|
|
|
/* Ppointer to the struct in a special section for the linker script */ \
|
2022-05-30 10:00:03 +00:00
|
|
|
static __used __section("_u_boot_sandbox_getopt") \
|
2013-12-03 23:43:23 +00:00
|
|
|
struct sandbox_cmdline_option \
|
|
|
|
*sandbox_cmdline_option_##f##_ptr = \
|
|
|
|
&sandbox_cmdline_option_##f
|
2012-02-15 23:51:16 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* 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:
|
2013-12-03 23:43:23 +00:00
|
|
|
* SANDBOX_CMDLINE_OPT(foo, 0, "The foo arg");
|
2012-02-15 23:51:16 +00:00
|
|
|
* Will create a new flag named "--foo" (no short option) that takes
|
|
|
|
* no argument. If the user specifies "--foo", then the callback func
|
2013-12-03 23:43:23 +00:00
|
|
|
* sandbox_cmdline_cb_foo() will automatically be called.
|
2012-02-15 23:51:16 +00:00
|
|
|
*/
|
2013-12-03 23:43:23 +00:00
|
|
|
#define SANDBOX_CMDLINE_OPT(f, ha, h) _SANDBOX_CMDLINE_OPT(f, 0, ha, h)
|
2012-02-15 23:51:16 +00:00
|
|
|
/*
|
|
|
|
* Same as above, but @s is used to specify a short flag e.g.
|
2013-12-03 23:43:23 +00:00
|
|
|
* SANDBOX_CMDLINE_OPT(foo, 'f', 0, "The foo arg");
|
2012-02-15 23:51:16 +00:00
|
|
|
*/
|
2013-12-03 23:43:23 +00:00
|
|
|
#define SANDBOX_CMDLINE_OPT_SHORT(f, s, ha, h) _SANDBOX_CMDLINE_OPT(f, s, ha, h)
|
2012-02-15 23:51:16 +00:00
|
|
|
|
|
|
|
#endif
|