uboot/arch/sandbox/include/asm/getopt.h
<<
>>
Prefs
   1/*
   2 * Code for setting up command line flags like `./u-boot --help`
   3 *
   4 * Copyright (c) 2011 The Chromium OS Authors.
   5 *
   6 * Licensed under the GPL-2 or later.
   7 */
   8
   9#ifndef __SANDBOX_GETOPT_H
  10#define __SANDBOX_GETOPT_H
  11
  12struct sandbox_state;
  13
  14/*
  15 * Internal structure for storing details about the flag.
  16 * Most people should not have to dig around in this as
  17 * it only gets parsed by the core sandbox code.  End
  18 * consumer code should focus on the macros below and
  19 * the callback function.
  20 */
  21struct sandbox_cmdline_option {
  22        /* The long flag name: "help" for "--help" */
  23        const char *flag;
  24        /* The (optional) short flag name: "h" for "-h" */
  25        int flag_short;
  26        /* The help string shown to the user when processing --help */
  27        const char *help;
  28        /* Whether this flag takes an argument */
  29        int has_arg;
  30        /* Callback into the end consumer code with the option */
  31        int (*callback)(struct sandbox_state *state, const char *opt);
  32};
  33
  34/*
  35 * Internal macro to expand the lower macros into the necessary
  36 * magic junk that makes this all work.
  37 */
  38#define _SANDBOX_CMDLINE_OPT(f, s, ha, h) \
  39        static struct sandbox_cmdline_option sandbox_cmdline_option_##f = { \
  40                .flag = #f, \
  41                .flag_short = s, \
  42                .help = h, \
  43                .has_arg = ha, \
  44                .callback = sandbox_cmdline_cb_##f, \
  45        }; \
  46        /* Ppointer to the struct in a special section for the linker script */ \
  47        static __attribute__((section(".u_boot_sandbox_getopt"), used)) \
  48                struct sandbox_cmdline_option \
  49                        *sandbox_cmdline_option_##f##_ptr = \
  50                        &sandbox_cmdline_option_##f
  51
  52/**
  53 * Macros for end code to declare new command line flags.
  54 *
  55 * @param f   The long flag name e.g. help
  56 * @param ha  Does the flag have an argument e.g. 0/1
  57 * @param h   The help string displayed when showing --help
  58 *
  59 * This invocation:
  60 *   SANDBOX_CMDLINE_OPT(foo, 0, "The foo arg");
  61 * Will create a new flag named "--foo" (no short option) that takes
  62 * no argument.  If the user specifies "--foo", then the callback func
  63 * sandbox_cmdline_cb_foo() will automatically be called.
  64 */
  65#define SANDBOX_CMDLINE_OPT(f, ha, h) _SANDBOX_CMDLINE_OPT(f, 0, ha, h)
  66/*
  67 * Same as above, but @s is used to specify a short flag e.g.
  68 *   SANDBOX_CMDLINE_OPT(foo, 'f', 0, "The foo arg");
  69 */
  70#define SANDBOX_CMDLINE_OPT_SHORT(f, s, ha, h) _SANDBOX_CMDLINE_OPT(f, s, ha, h)
  71
  72#endif
  73