From 744c4a9c94064a0dae7d2ed8237ac8129e65510c Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff Date: Wed, 31 May 2017 13:56:44 +0300 Subject: Fix MH initialization order Calls to mh_global_profile_get and similar functions must appear only after a call to mh_getopt (more properly, after mh_init and mh_init2 are callead). This sequence was inadvertently changed by commit e267ac86, due to which comp, forw, repl and burst stopped reading important information from .mh_profile. Bug spotted by Pierre-Jean. * mh/burst.c: Make sure profile variables are accessed after the profile is read. * mh/comp.c: Likewise. * mh/forw.c: Likewise. * mh/repl.c: Likewise. * mh/mh.h (mh_whatnow_env_from_environ): Split into two functions: mh_whatnow_env_from_environ_early, to be called before mh_getopt, and mh_whatnow_env_from_environ_late, to be called after it. * mh/whatnowenv.c: Ditto. * mh/whatnow.c: Call these two in the right order. * THANKS: Update. --- THANKS | 1 + mh/burst.c | 6 ++++-- mh/comp.c | 9 ++++++--- mh/forw.c | 6 ++++-- mh/mh.h | 3 ++- mh/repl.c | 9 ++++++--- mh/whatnow.c | 4 ++-- mh/whatnowenv.c | 12 +++++++++--- 8 files changed, 34 insertions(+), 16 deletions(-) diff --git a/THANKS b/THANKS index 8153e2723..a9367700e 100644 --- a/THANKS +++ b/THANKS @@ -24,6 +24,7 @@ Matthew Whitworth maks Neil R. Ormos Olivier Bornet +Pierre-Jean Robby Villegas Ronan KERYELL Sam Roberts diff --git a/mh/burst.c b/mh/burst.c index 156764544..a31b5c822 100644 --- a/mh/burst.c +++ b/mh/burst.c @@ -650,10 +650,12 @@ main (int argc, char **argv) int rc; mu_mailbox_t mbox; mu_msgset_t msgset; - const char *tempfolder = mh_global_profile_get ("Temp-Folder", ".temp"); - + const char *tempfolder = NULL; + mh_getopt (&argc, &argv, options, MH_GETOPT_DEFAULT_FOLDER, args_doc, prog_doc, NULL); + if (!tempfolder) + tempfolder = mh_global_profile_get ("Temp-Folder", ".temp"); if (eb_min_length == 0) eb_min_length = 1; diff --git a/mh/comp.c b/mh/comp.c index d42f453db..075bb4516 100644 --- a/mh/comp.c +++ b/mh/comp.c @@ -130,10 +130,13 @@ copy_message (mu_mailbox_t mbox, size_t n, const char *file) int main (int argc, char **argv) { - draftfolder = mh_global_profile_get ("Draft-Folder", NULL); - whatnowproc = mh_global_profile_get ("whatnowproc", NULL); - mh_getopt (&argc, &argv, options, 0, args_doc, prog_doc, NULL); + + if (!draftfolder) + draftfolder = mh_global_profile_get ("Draft-Folder", NULL); + if (!whatnowproc) + whatnowproc = mh_global_profile_get ("whatnowproc", NULL); + if (use_draft) draftmessage = "cur"; if (!formfile) diff --git a/mh/forw.c b/mh/forw.c index d0f6e7f85..5e0e08b97 100644 --- a/mh/forw.c +++ b/mh/forw.c @@ -382,10 +382,12 @@ main (int argc, char **argv) { int rc; - draftfolder = mh_global_profile_get ("Draft-Folder", NULL); - whatnowproc = mh_global_profile_get ("whatnowproc", NULL); mh_getopt (&argc, &argv, options, MH_GETOPT_DEFAULT_FOLDER, args_doc, prog_doc, NULL); + if (!draftfolder) + draftfolder = mh_global_profile_get ("Draft-Folder", NULL); + if (!whatnowproc) + whatnowproc = mh_global_profile_get ("whatnowproc", NULL); if (!formfile) mh_find_file ("forwcomps", &formfile); diff --git a/mh/mh.h b/mh/mh.h index 4984d483c..65921e37d 100644 --- a/mh/mh.h +++ b/mh/mh.h @@ -387,5 +387,6 @@ char *mh_safe_make_file_name (const char *dir, const char *file); void mh_mailbox_get_cur (mu_mailbox_t mbox, size_t *pcur); void mh_mailbox_set_cur (mu_mailbox_t mbox, size_t cur); -void mh_whatnow_env_from_environ (struct mh_whatnow_env *wh); +void mh_whatnow_env_from_environ_early (struct mh_whatnow_env *wh); +void mh_whatnow_env_from_environ_late (struct mh_whatnow_env *wh); void mh_whatnow_env_to_environ (struct mh_whatnow_env *wh); diff --git a/mh/repl.c b/mh/repl.c index 7d3108a81..1cc192971 100644 --- a/mh/repl.c +++ b/mh/repl.c @@ -294,12 +294,15 @@ main (int argc, char **argv) { int rc; - draftfolder = mh_global_profile_get ("Draft-Folder", NULL); - whatnowproc = mh_global_profile_get ("whatnowproc", NULL); - mh_getopt (&argc, &argv, options, MH_GETOPT_DEFAULT_FOLDER, args_doc, prog_doc, NULL); + if (!draftfolder) + draftfolder = mh_global_profile_get ("Draft-Folder", NULL); + if (!whatnowproc) + whatnowproc = mh_global_profile_get ("whatnowproc", NULL); + + if (!format_str) format_str = default_format_str; diff --git a/mh/whatnow.c b/mh/whatnow.c index 541f3b37b..32b619835 100644 --- a/mh/whatnow.c +++ b/mh/whatnow.c @@ -52,9 +52,9 @@ static struct mu_option options[] = { int main (int argc, char **argv) { - mh_whatnow_env_from_environ (&wh_env); - + mh_whatnow_env_from_environ_early (&wh_env); mh_getopt (&argc, &argv, options, 0, args_doc, prog_doc, NULL); + mh_whatnow_env_from_environ_late (&wh_env); if (argc) wh_env.draftfile = argv[0]; diff --git a/mh/whatnowenv.c b/mh/whatnowenv.c index 9a7984cf1..fdcfc64b7 100644 --- a/mh/whatnowenv.c +++ b/mh/whatnowenv.c @@ -25,10 +25,8 @@ _add_to_list (size_t num, mu_message_t msg, void *data) } void -mh_whatnow_env_from_environ (struct mh_whatnow_env *wh) +mh_whatnow_env_from_environ_early (struct mh_whatnow_env *wh) { - char *folder = getenv ("mhfolder"); - memset (wh, 0, sizeof (*wh)); wh->file = getenv ("mhdraft"); @@ -36,6 +34,14 @@ mh_whatnow_env_from_environ (struct mh_whatnow_env *wh) wh->draftfile = wh->file; wh->editor = getenv ("mheditor"); wh->prompt = getenv ("mhprompt"); /* extension */ +} + + +void +mh_whatnow_env_from_environ_late (struct mh_whatnow_env *wh) +{ + char *folder = getenv ("mhfolder"); + if (folder) { wh->anno_field = getenv ("mhannotate"); -- cgit v1.2.1