getopt.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. #ifndef __SANDBOX_GETOPT_H
  9. #define __SANDBOX_GETOPT_H
  10. struct sandbox_state;
  11. /*
  12. * Internal structure for storing details about the flag.
  13. * Most people should not have to dig around in this as
  14. * it only gets parsed by the core sandbox code. End
  15. * consumer code should focus on the macros below and
  16. * the callback function.
  17. */
  18. struct sb_cmdline_option {
  19. /* The long flag name: "help" for "--help" */
  20. const char *flag;
  21. /* The (optional) short flag name: "h" for "-h" */
  22. int flag_short;
  23. /* The help string shown to the user when processing --help */
  24. const char *help;
  25. /* Whether this flag takes an argument */
  26. int has_arg;
  27. /* Callback into the end consumer code with the option */
  28. int (*callback)(struct sandbox_state *state, const char *opt);
  29. };
  30. /*
  31. * Internal macro to expand the lower macros into the necessary
  32. * magic junk that makes this all work.
  33. */
  34. #define _SB_CMDLINE_OPT(f, s, ha, h) \
  35. static struct sb_cmdline_option sb_cmdline_option_##f = { \
  36. .flag = #f, \
  37. .flag_short = s, \
  38. .help = h, \
  39. .has_arg = ha, \
  40. .callback = sb_cmdline_cb_##f, \
  41. }; \
  42. /* Ppointer to the struct in a special section for the linker script */ \
  43. static __attribute__((section(".u_boot_sandbox_getopt"), used)) \
  44. struct sb_cmdline_option *sb_cmdline_option_##f##_ptr = \
  45. &sb_cmdline_option_##f
  46. /**
  47. * Macros for end code to declare new command line flags.
  48. *
  49. * @param f The long flag name e.g. help
  50. * @param ha Does the flag have an argument e.g. 0/1
  51. * @param h The help string displayed when showing --help
  52. *
  53. * This invocation:
  54. * SB_CMDLINE_OPT(foo, 0, "The foo arg");
  55. * Will create a new flag named "--foo" (no short option) that takes
  56. * no argument. If the user specifies "--foo", then the callback func
  57. * sb_cmdline_cb_foo() will automatically be called.
  58. */
  59. #define SB_CMDLINE_OPT(f, ha, h) _SB_CMDLINE_OPT(f, 0, ha, h)
  60. /*
  61. * Same as above, but @s is used to specify a short flag e.g.
  62. * SB_CMDLINE_OPT(foo, 'f', 0, "The foo arg");
  63. */
  64. #define SB_CMDLINE_OPT_SHORT(f, s, ha, h) _SB_CMDLINE_OPT(f, s, ha, h)
  65. #endif