summaryrefslogtreecommitdiffabout
authorSergey Poznyakoff <gray@gnu.org>2017-06-15 19:09:30 (GMT)
committer Sergey Poznyakoff <gray@gnu.org.ua>2017-06-16 06:50:36 (GMT)
commitc1f2442cd53e43cf11cc8f5b649b454b3f2cb03f (patch) (side-by-side diff)
tree6ef0b4a8d01cb81d8f4f1ae2757ad4047ebb03f5
parent8b5715db380634336a231b0c8573c350992c8dce (diff)
parentfe90e86dac8c9c91a35347ee5bb4513195263ee2 (diff)
downloadmailutils-c1f2442cd53e43cf11cc8f5b649b454b3f2cb03f.tar.gz
mailutils-c1f2442cd53e43cf11cc8f5b649b454b3f2cb03f.tar.bz2
Merge branch 'master' into locus
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--NEWS9
-rw-r--r--mh/comp.c13
-rw-r--r--mh/forw.c14
-rw-r--r--mh/mh.h6
-rw-r--r--mh/mh_alias_gram.y3
-rw-r--r--mh/mh_getopt.c44
-rw-r--r--mh/mh_getopt.h13
-rw-r--r--mh/mh_whatnow.c7
-rw-r--r--mh/mh_whom.c86
-rw-r--r--mh/repl.c16
-rw-r--r--mh/tests/comp.at43
-rw-r--r--mh/tests/forw.at123
-rw-r--r--mh/tests/repl.at64
-rw-r--r--mh/whom.c63
14 files changed, 431 insertions, 73 deletions
diff --git a/NEWS b/NEWS
index 266a999..e351691 100644
--- a/NEWS
+++ b/NEWS
@@ -1,7 +1,7 @@
-GNU mailutils NEWS -- history of user-visible changes. 2017-06-01
+GNU mailutils NEWS -- history of user-visible changes. 2017-06-16
Copyright (C) 2002-2017 Free Software Foundation, Inc.
See the end of file for copying conditions.
Please send mailutils bug reports to <bug-mailutils@gnu.org>.
@@ -72,12 +72,19 @@ is the same as for the global section described above, e.g.:
If the "tls" section is absent, but "tls-mode" is specified and it's
value is anything but "no", the settings from the global "tls" section
will be used. In this case, it is an error if the global "tls"
section is not defined.
+* Source location API
+
+Libmailutils provides functions for keeping track of locations in
+source files for diagnostic purposes.
+
+* Improve error reporting
+
* AM_GNU_MAILUTILS autoconf macro
Required version must be literal string.
The packed version number (MAILUTILS_VERSION_NUMBER) is no longer
defined. Instead, the following constants are defined in config.h:
diff --git a/mh/comp.c b/mh/comp.c
index 075bb45..29389c6 100644
--- a/mh/comp.c
+++ b/mh/comp.c
@@ -124,21 +124,22 @@ copy_message (mu_mailbox_t mbox, size_t n, const char *file)
mu_error (_("error copying to \"%s\": %s"),
file, mu_strerror (rc));
}
return rc;
}
+static struct mh_optinit optinit[] = {
+ { "draftfolder", "Draft-Folder" },
+ { "whatnowproc", "whatnowproc" },
+ { NULL }
+};
+
int
main (int argc, char **argv)
{
- 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);
+ mh_getopt_ext (&argc, &argv, options, 0, optinit, args_doc, prog_doc, NULL);
if (use_draft)
draftmessage = "cur";
if (!formfile)
mh_find_file ("components", &formfile);
diff --git a/mh/forw.c b/mh/forw.c
index 5e0e08b..016ac84 100644
--- a/mh/forw.c
+++ b/mh/forw.c
@@ -374,23 +374,25 @@ finish_draft ()
rc = mu_stream_write (stream, "\n\n", 2, NULL);
}
mu_stream_close (stream);
mu_stream_destroy (&stream);
}
+static struct mh_optinit optinit[] = {
+ { "draftfolder", "Draft-Folder" },
+ { "whatnowproc", "whatnowproc" },
+ { NULL }
+};
+
int
main (int argc, char **argv)
{
int rc;
- 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);
+ mh_getopt_ext (&argc, &argv, options, MH_GETOPT_DEFAULT_FOLDER, optinit,
+ args_doc, prog_doc, NULL);
if (!formfile)
mh_find_file ("forwcomps", &formfile);
if (input_file)
{
if (encap == encap_mime)
diff --git a/mh/mh.h b/mh/mh.h
index 69be72d..76bc85e 100644
--- a/mh/mh.h
+++ b/mh/mh.h
@@ -339,13 +339,17 @@ int mh_whatnowproc (struct mh_whatnow_env *wh, int initial_edit,
int mh_disposition (const char *filename);
int mh_usedraft (const char *filename);
int mh_file_copy (const char *from, const char *to);
char *mh_draft_name (void);
char *mh_create_message_id (int);
-int mh_whom (const char *filename, int check);
+
+int mh_whom_header (mu_header_t hdr);
+int mh_whom_file (const char *filename, int check);
+int mh_whom_message (mu_message_t msg, int check);
+
void mh_set_reply_regex (const char *str);
int mh_decode_2047 (char *text, char **decoded_text);
const char *mh_charset (const char *);
int mh_alias_read (char const *name, int fail);
int mh_alias_get (const char *name, mu_list_t *return_list);
diff --git a/mh/mh_alias_gram.y b/mh/mh_alias_gram.y
index d722998..26b13ec 100644
--- a/mh/mh_alias_gram.y
+++ b/mh/mh_alias_gram.y
@@ -499,12 +499,15 @@ unix_passwd_to_list ()
}
int
mh_read_aliases (void)
{
const char *p;
+
+ if (alias_list)
+ return 0;
p = mh_global_profile_get ("Aliasfile", NULL);
if (p)
{
struct mu_wordsplit ws;
diff --git a/mh/mh_getopt.c b/mh/mh_getopt.c
index 65fe3e8..16a6e5c 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);
}
diff --git a/mh/mh_getopt.h b/mh/mh_getopt.h
index 2aa90b6..684ace6 100644
--- a/mh/mh_getopt.h
+++ b/mh/mh_getopt.h
@@ -17,15 +17,24 @@
#include <mailutils/nls.h>
#include <mailutils/opt.h>
#define MH_GETOPT_DEFAULT_FOLDER 0x1
+struct mh_optinit
+{
+ char const *opt; /* Option name */
+ char const *var; /* mh_property name */
+};
+
+void mh_getopt_ext (int *pargc, char ***pargv, struct mu_option *options,
+ int mhflags, struct mh_optinit *optinit,
+ char *argdoc, char *progdoc, char *extradoc);
+
void mh_getopt (int *pargc, char ***pargv, struct mu_option *options,
- int flags,
- char *argdoc, char *progdoc, char *extradoc);
+ int flags, char *argdoc, char *progdoc, char *extradoc);
void mh_opt_notimpl (struct mu_parseopt *po, struct mu_option *opt,
char const *arg);
void mh_opt_notimpl_warning (struct mu_parseopt *po, struct mu_option *opt,
char const *arg);
void mh_opt_clear_string (struct mu_parseopt *po, struct mu_option *opt,
diff --git a/mh/mh_whatnow.c b/mh/mh_whatnow.c
index 5dc15b5..0bd2aca 100644
--- a/mh/mh_whatnow.c
+++ b/mh/mh_whatnow.c
@@ -541,15 +541,16 @@ call_send (struct mh_whatnow_env *wh, int argc, char **argv, int *status)
static int
whom (struct mh_whatnow_env *wh, int argc, char **argv, int *status)
{
if (!wh->file)
mu_error (_("no draft file to display"));
else
- mh_whom (wh->file, (argc == 2
- && (strcmp (argv[1], "-check") == 0
- || strcmp (argv[1], "--check") == 0)));
+ mh_whom_file (wh->file,
+ (argc == 2
+ && (strcmp (argv[1], "-check") == 0
+ || strcmp (argv[1], "--check") == 0)));
return 0;
}
/* Help table for whatnow */
static struct helpdata whatnow_helptab[] = {
{ "display [<>]",
diff --git a/mh/mh_whom.c b/mh/mh_whom.c
index bbdef7a..f3067d1 100644
--- a/mh/mh_whom.c
+++ b/mh/mh_whom.c
@@ -258,65 +258,93 @@ read_header (mu_stream_t stream)
exit (1);
}
return hdr;
}
int
-mh_whom (const char *filename, int check)
+mh_whom_header (mu_header_t hdr)
+{
+ size_t count = 0;
+ int rc;
+ const char *val;
+
+ mh_read_aliases ();
+
+ if (mu_header_sget_value (hdr, MU_HEADER_TO, &val) == 0)
+ scan_addrs (val, 0);
+ if (mu_header_sget_value (hdr, MU_HEADER_CC, &val) == 0)
+ scan_addrs (val, 0);
+ if (mu_header_sget_value (hdr, MU_HEADER_BCC, &val) == 0)
+ scan_addrs (val, 1);
+
+ if (local_rcp)
+ {
+ printf (" %s\n", _("-- Local Recipients --"));
+ mu_list_foreach (local_rcp, _print_local_recipient, &count);
+ }
+
+ if (network_rcp)
+ {
+ printf (" %s\n", _("-- Network Recipients --"));
+ mu_list_foreach (network_rcp, _print_recipient, &count);
+ }
+
+ if (count == 0)
+ {
+ mu_error(_("no recipients"));
+ rc = -1;
+ }
+
+ destroy_addrs (&network_rcp);
+ destroy_addrs (&local_rcp);
+ return rc;
+}
+
+int
+mh_whom_file (const char *filename, int check)
{
int rc = 0;
if (access (filename, R_OK))
{
mu_error ("%s: %s", filename, mu_strerror (errno));
rc = -1;
}
else
{
- size_t count = 0;
mu_header_t hdr;
mu_stream_t str;
int rc;
- const char *val;
rc = mu_file_stream_create (&str, filename, MU_STREAM_READ);
if (rc)
{
mu_diag_funcall (MU_DIAG_ERROR, "mu_file_stream_create",
filename, rc);
exit (1);
}
hdr = read_header (str);
mu_stream_unref (str);
- mh_read_aliases ();
-
- if (mu_header_sget_value (hdr, MU_HEADER_TO, &val) == 0)
- scan_addrs (val, 0);
- if (mu_header_sget_value (hdr, MU_HEADER_CC, &val) == 0)
- scan_addrs (val, 0);
- if (mu_header_sget_value (hdr, MU_HEADER_BCC, &val) == 0)
- scan_addrs (val, 1);
-
- if (local_rcp)
- {
- printf (" %s\n", _("-- Local Recipients --"));
- mu_list_foreach (local_rcp, _print_local_recipient, &count);
- }
+ rc = mh_whom_header (hdr);
+ mu_header_destroy (&hdr);
+ }
+ return rc;
+}
- if (network_rcp)
- {
- printf (" %s\n", _("-- Network Recipients --"));
- mu_list_foreach (network_rcp, _print_recipient, &count);
- }
+int
+mh_whom_message (mu_message_t msg, int check)
+{
+ mu_header_t hdr;
+ int rc;
- if (count == 0)
- {
- mu_error(_("no recipients"));
- rc = -1;
- }
+ rc = mu_message_get_header (msg, &hdr);
+ if (rc)
+ mu_error (_("can't get headers: %s"), mu_strerror (rc));
+ else
+ {
+ rc = mh_whom_header (hdr);
mu_header_destroy (&hdr);
}
- destroy_addrs (&network_rcp);
- destroy_addrs (&local_rcp);
return rc;
}
+
diff --git a/mh/repl.c b/mh/repl.c
index 1cc1929..169f977 100644
--- a/mh/repl.c
+++ b/mh/repl.c
@@ -286,25 +286,25 @@ make_draft (mu_mailbox_t mbox, int disp, struct mh_whatnow_env *wh)
wh->msg = mu_strdup (p+1);
free (msgname);
}
}
}
+static struct mh_optinit optinit[] = {
+ { "draftfolder", "Draft-Folder" },
+ { "whatnowproc", "whatnowproc" },
+ { NULL }
+};
+
int
main (int argc, char **argv)
{
int rc;
- 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);
-
+ mh_getopt_ext (&argc, &argv, options, MH_GETOPT_DEFAULT_FOLDER, optinit,
+ args_doc, prog_doc, NULL);
if (!format_str)
format_str = default_format_str;
if (mh_format_parse (format_str, &format))
{
diff --git a/mh/tests/comp.at b/mh/tests/comp.at
index 563310c..7a63e5f 100644
--- a/mh/tests/comp.at
+++ b/mh/tests/comp.at
@@ -190,11 +190,54 @@ To: root
Subject: test input
message body
Seen by mhed
])
+MH_CHECK([use Draft-Folder],[comp07 draftfolder],
+[mkdir Mail/drafts
+echo "Draft-Folder: +drafts" >> $MH
+echo 'quit' | compcmd | cwdrepl
+sed 's/ *$//' Mail/drafts/1
+],
+[0],
+[-- Editor invocation: ./Mail/drafts/1
+-- Input file:
+To:
+cc:
+Subject:
+--------
+-- Input file end
+What now? draft left on "./Mail/drafts/1".
+To:
+cc:
+Subject:
+--------
+Seen by mhed
+])
+
+MH_CHECK([-nodraftfolder],[comp08 nodraftfolder draftfolder],
+[mkdir Mail/drafts
+echo "Draft-Folder: +drafts" >> $MH
+echo 'quit' | compcmd -nodraftfolder | cwdrepl
+sed 's/ *$//' Mail/draft
+],
+[0],
+[-- Editor invocation: ./Mail/draft
+-- Input file:
+To:
+cc:
+Subject:
+--------
+-- Input file end
+What now? draft left on "./Mail/draft".
+To:
+cc:
+Subject:
+--------
+Seen by mhed
+])
m4_popdef([compcmd])
m4_popdef([MH_KEYWORDS])
# End of comp.at
diff --git a/mh/tests/forw.at b/mh/tests/forw.at
index e0566df..f668a33 100644
--- a/mh/tests/forw.at
+++ b/mh/tests/forw.at
@@ -394,10 +394,133 @@ Subject: test input
message body
-- Input file end
What now? draft left on "./Mail/draft".
])
+MH_CHECK([Draft-Folder],[forw07 forw-draftfolder draftfolder],[
+mkdir Mail/inbox
+mkdir Mail/drafts
+echo "Draft-Folder: +drafts" >> $MH
+
+AT_DATA([Mail/inbox/1],[From: gray
+To: root
+Subject: test input
+
+message body
+])
+
+echo "quit" | forwcmd 1 | cwdrepl
+echo == Mail/drafts/1 ==
+cat Mail/drafts/1
+echo == Message ==
+sed '/^X-IMAPbase/d' Mail/inbox/1
+],
+[0],
+[-- Editor invocation: ./Mail/drafts/1
+-- Input file:
+To:
+cc:
+Subject:
+--------
+
+------- Forwarded message
+From: gray
+To: root
+Subject: test input
+
+message body
+
+------- End of Forwarded message
+
+-- Input file end
+What now? draft left on "./Mail/drafts/1".
+== Mail/drafts/1 ==
+To:
+cc:
+Subject:
+--------
+
+------- Forwarded message
+From: gray
+To: root
+Subject: test input
+
+message body
+
+------- End of Forwarded message
+
+Seen by mhed
+== Message ==
+From: gray
+To: root
+Subject: test input
+
+message body
+])
+
+MH_CHECK([-nodraftfolder],[forw08 forw-nodraftfolder nodraftfolder draftfolder],[
+mkdir Mail/inbox
+mkdir Mail/drafts
+echo "Draft-Folder: +drafts" >> $MH
+
+AT_DATA([Mail/inbox/1],[From: gray
+To: root
+Subject: test input
+
+message body
+])
+
+echo "quit" | forwcmd -nodraftfolder 1 | cwdrepl
+echo == Mail/draft ==
+cat Mail/draft
+echo == Message ==
+sed '/^X-IMAPbase/d' Mail/inbox/1
+],
+[0],
+[-- Editor invocation: ./Mail/draft
+-- Input file:
+To:
+cc:
+Subject:
+--------
+
+------- Forwarded message
+From: gray
+To: root
+Subject: test input
+
+message body
+
+------- End of Forwarded message
+
+-- Input file end
+What now? draft left on "./Mail/draft".
+== Mail/draft ==
+To:
+cc:
+Subject:
+--------
+
+------- Forwarded message
+From: gray
+To: root
+Subject: test input
+
+message body
+
+------- End of Forwarded message
+
+Seen by mhed
+== Message ==
+From: gray
+To: root
+Subject: test input
+
+message body
+])
+
+
m4_popdef([forwcmd])
m4_popdef([MH_KEYWORDS])
# End of forw.at
diff --git a/mh/tests/repl.at b/mh/tests/repl.at
index bd58e9f..f8a194c 100644
--- a/mh/tests/repl.at
+++ b/mh/tests/repl.at
@@ -76,9 +76,73 @@ To: <gray@example.com>
Subject: Re: test input
X-Mailer: MH (AT_PACKAGE_NAME AT_PACKAGE_VERSION)
--------
Seen by mhed
])
+MH_CHECK([Draft-Folder],[repl02 repl-draftfolder draftfolder],[
+mkdir Mail/inbox
+mkdir Mail/drafts
+echo "Draft-Folder: +drafts" >> $MH
+
+AT_DATA([Mail/inbox/1],[From: gray@example.com
+To: root@example.com
+Subject: test input
+
+message body
+])
+echo "quit" | replcmd +inbox 1 | cwdrepl
+echo == Mail/drafts/1 ==
+cat Mail/drafts/1
+],
+[0],
+[-- Editor invocation: ./Mail/drafts/1
+-- Input file:
+To: <gray@example.com>
+Subject: Re: test input
+X-Mailer: MH (AT_PACKAGE_NAME AT_PACKAGE_VERSION)
+--------
+-- Input file end
+What now? draft left on "./Mail/drafts/1".
+== Mail/drafts/1 ==
+To: <gray@example.com>
+Subject: Re: test input
+X-Mailer: MH (AT_PACKAGE_NAME AT_PACKAGE_VERSION)
+--------
+Seen by mhed
+])
+
+MH_CHECK([-nodraftfolder],[repl03 repl-nodraftfolder nodraftfolder draftfolder],[
+mkdir Mail/inbox
+mkdir Mail/drafts
+echo "Draft-Folder: +drafts" >> $MH
+
+AT_DATA([Mail/inbox/1],[From: gray@example.com
+To: root@example.com
+Subject: test input
+
+message body
+])
+echo "quit" | replcmd -nodraftfolder +inbox 1 | cwdrepl
+echo == Mail/draft ==
+cat Mail/draft
+],
+[0],
+[-- Editor invocation: ./Mail/draft
+-- Input file:
+To: <gray@example.com>
+Subject: Re: test input
+X-Mailer: MH (AT_PACKAGE_NAME AT_PACKAGE_VERSION)
+--------
+-- Input file end
+What now? draft left on "./Mail/draft".
+== Mail/draft ==
+To: <gray@example.com>
+Subject: Re: test input
+X-Mailer: MH (AT_PACKAGE_NAME AT_PACKAGE_VERSION)
+--------
+Seen by mhed
+])
+
m4_popdef([replcmd])
m4_popdef([MH_KEYWORDS])
# End of repl.at
diff --git a/mh/whom.c b/mh/whom.c
index 7c3c5ab..97deabb 100644
--- a/mh/whom.c
+++ b/mh/whom.c
@@ -18,13 +18,13 @@
#include <mh.h>
static char prog_doc[] = N_("Report to whom a message would go");
static char args_doc[] = "[FILE]";
static int check_recipients;
-static int use_draft; /* Use the prepared draft */
+static char *message;
static const char *draft_folder; /* Use this draft folder */
static void
add_alias (struct mu_parseopt *po, struct mu_option *opt, char const *arg)
{
mh_alias_read (arg, 1);
@@ -42,13 +42,13 @@ set_draftmessage (struct mu_parseopt *po, struct mu_option *opt,
static struct mu_option options[] = {
{ "alias", 0, N_("FILE"), MU_OPTION_DEFAULT,
N_("specify additional alias file"),
mu_c_string, NULL, add_alias },
{ "draft", 0, NULL, MU_OPTION_DEFAULT,
N_("use prepared draft"),
- mu_c_bool, &use_draft },
+ mu_c_string, &message, NULL, "draft" },
{ "draftfolder", 0, N_("FOLDER"), MU_OPTION_DEFAULT,
N_("specify the folder for message drafts"),
mu_c_string, &draft_folder },
{ "nodraftfolder", 0, NULL, MU_OPTION_DEFAULT,
N_("undo the effect of the last -draftfolder option"),
mu_c_string, &draft_folder, mh_opt_clear_string },
@@ -57,25 +57,60 @@ static struct mu_option options[] = {
mu_c_string, NULL, set_draftmessage },
{ "check", 0, NULL, MU_OPTION_DEFAULT,
N_("check if addresses are deliverable"),
mu_c_bool, &check_recipients },
MU_OPTION_END
};
+
+static struct mh_optinit optinit[] = {
+ { "draftfolder", "Draft-Folder" },
+ { NULL }
+};
int
main (int argc, char **argv)
{
- char *name = "draft";
-
- mh_getopt (&argc, &argv, options, 0, args_doc, prog_doc, NULL);
+ int rc;
+
+ mh_getopt_ext (&argc, &argv, options, 0, optinit, args_doc, prog_doc, NULL);
- if (!use_draft && argc > 0)
- name = argv[0];
+ if (draft_folder)
+ {
+ mu_mailbox_t mbox = mh_open_folder (draft_folder, MU_STREAM_READ);
+ mu_msgset_t msgset;
+ size_t msgno;
+ mu_message_t msg;
+
+ mh_msgset_parse (&msgset, mbox, argc, argv, "cur");
+ if (!mh_msgset_single_message (msgset))
+ {
+ mu_error (_("only one message at a time!"));
+ return 1;
+ }
+ msgno = mh_msgset_first (msgset, RET_MSGNO);
+ rc = mu_mailbox_get_message (mbox, msgno, &msg);
+ if (rc)
+ {
+ mu_error (_("can't read message: %s"), mu_strerror (rc));
+ exit (1);
+ }
+ rc = mh_whom_message (msg, check_recipients);
+ }
+ else
+ {
+ if (argc > 0)
+ {
+ if (message || argc > 1)
+ {
+ mu_error (_("only one file at a time!"));
+ exit (1);
+ }
+ message = argv[0];
+ }
+ else
+ message = "draft";
+ rc = mh_whom_file (mh_expand_name (draft_folder, message, NAME_ANY),
+ check_recipients);
+ }
- if (!draft_folder)
- draft_folder = mh_global_profile_get ("Draft-Folder",
- mu_folder_directory ());
-
-
- return mh_whom (mh_expand_name (draft_folder, name, NAME_ANY),
- check_recipients) ? 1 : 0;
+ return rc ? 1 : 0;
}

Return to:

Send suggestions and report system problems to the System administrator.