From fe90e86dac8c9c91a35347ee5bb4513195263ee2 Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff Date: Sun, 11 Jun 2017 00:29:06 +0300 Subject: Fix the -nodraftfolder and -nowhatnowproc options. The commit 744c4a9c didn't take into account the -nodraftfolder and -nowhatnowproc options, which can be used to cancel the effect of the corresponding facilities. This commit fixes it. * mh/mh_getopt.c (mh_getopt_ext): New function. * mh/mh_getopt.h (mh_getopt_ext): New prototype. (mh_optinit): New struct. * mh/tests/comp.at: Test the use of Draft-Folder * mh/tests/forw.at: Likewise. * mh/tests/repl.at: Likewise. * mh/comp.c (main): use mh_getopt_ext to properly process draftfolder and whatnowproc. * mh/forw.c: Likewise. * mh/repl.c: Likewise. * mh/mh.h (mh_whom): Remove. (mh_whom_header, mh_whom_file, mh_whom_message): New protos. * mh/mh_alias.y (mh_read_aliases): Don't read aliases twice. * mh/mh_whatnow.c (whom): Use mh_whom_file. * mh/mh_whom.c (mh_whom): Rewrite and rename to mh_whom_file. (mh_whom_header, mh_whom_message): New functions. * mh/whom.c: Use mh_getopt_ext. Interpret command line arguments, depending on whether the draftfile facility is in use. --- mh/mh_getopt.c | 44 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) (limited to 'mh/mh_getopt.c') 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 @@ -179,10 +179,39 @@ has_folder_option (struct mu_option *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; @@ -256,6 +285,7 @@ mh_getopt (int *pargc, char ***pargv, struct mu_option *options, 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); @@ -284,6 +314,14 @@ mh_getopt (int *pargc, char ***pargv, struct mu_option *options, 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) { -- cgit v1.2.1