diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2017-06-15 22:09:30 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2017-06-16 09:50:36 +0300 |
commit | c1f2442cd53e43cf11cc8f5b649b454b3f2cb03f (patch) | |
tree | 6ef0b4a8d01cb81d8f4f1ae2757ad4047ebb03f5 /mh/mh_getopt.c | |
parent | 8b5715db380634336a231b0c8573c350992c8dce (diff) | |
parent | fe90e86dac8c9c91a35347ee5bb4513195263ee2 (diff) | |
download | mailutils-c1f2442cd53e43cf11cc8f5b649b454b3f2cb03f.tar.gz mailutils-c1f2442cd53e43cf11cc8f5b649b454b3f2cb03f.tar.bz2 |
Merge branch 'master' into locus
Diffstat (limited to 'mh/mh_getopt.c')
-rw-r--r-- | mh/mh_getopt.c | 44 |
1 files changed, 41 insertions, 3 deletions
diff --git a/mh/mh_getopt.c b/mh/mh_getopt.c index 65fe3e8c7..16a6e5c55 100644 --- a/mh/mh_getopt.c +++ b/mh/mh_getopt.c @@ -176,16 +176,45 @@ has_folder_option (struct mu_option *opt) return 1; ++opt; } return 0; } +static void +opt_init (struct mu_parseopt *po, + struct mu_option **optv, struct mh_optinit *optinit) +{ + if (!optinit) + return; + for (; optinit->opt; optinit++) + { + size_t i; + for (i = 0; optv[i]; i++) + { + struct mu_option *opt; + for (opt = optv[i]; !MU_OPTION_IS_END (opt); opt++) + { + if (strcmp (opt->opt_long, optinit->opt) == 0) + { + char const *val = mh_global_profile_get (optinit->var, NULL); + if (val) + { + (opt->opt_set ? + opt->opt_set : mu_option_set_value) (po, opt, val); + } + break; + } + } + } + } +} + void -mh_getopt (int *pargc, char ***pargv, struct mu_option *options, - int mhflags, - char *argdoc, char *progdoc, char *extradoc) +mh_getopt_ext (int *pargc, char ***pargv, struct mu_option *options, + int mhflags, struct mh_optinit *optinit, + char *argdoc, char *progdoc, char *extradoc) { int argc = *pargc; char **argv = *pargv; struct mu_parseopt po; struct mu_option *optv[3]; struct getopt_data getopt_data; @@ -253,12 +282,13 @@ mh_getopt (int *pargc, char ***pargv, struct mu_option *options, i = 0; if (mhflags & MH_GETOPT_DEFAULT_FOLDER) optv[i++] = folder_option; if (options) optv[i++] = options; optv[i] = NULL; + opt_init (&po, optv, optinit); if (mu_parseopt (&po, argc, argv, optv, flags)) exit (po.po_exit_error); argc -= po.po_arg_start; argv += po.po_arg_start; @@ -282,12 +312,20 @@ mh_getopt (int *pargc, char ***pargv, struct mu_option *options, *pargv = argv; mh_init2 (); } void +mh_getopt (int *pargc, char ***pargv, struct mu_option *options, + int mhflags, char *argdoc, char *progdoc, char *extradoc) +{ + mh_getopt_ext (pargc, pargv, options, mhflags, NULL, argdoc, progdoc, + extradoc); +} + +void mh_opt_notimpl (struct mu_parseopt *po, struct mu_option *opt, char const *arg) { mu_error (_("option is not yet implemented: %s"), opt->opt_long); exit (1); } |