summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2020-08-18 17:38:10 +0300
committerSergey Poznyakoff <gray@gnu.org>2020-08-18 17:38:10 +0300
commitd2eb03a3b9db683418cc0bd084915468e4968854 (patch)
treeec40bc0c8e9f9f53acb9cb0b7d76ee197410c85c
parent37713b42a501892469234b90454731d8d8b7a3e6 (diff)
downloadmailutils-d2eb03a3b9db683418cc0bd084915468e4968854.tar.gz
mailutils-d2eb03a3b9db683418cc0bd084915468e4968854.tar.bz2
libmailutils/tests tools: use mu_cli_simple for option handling
-rw-r--r--libmailutils/tests/cidr.c43
-rw-r--r--libmailutils/tests/debugspec.c54
-rw-r--r--libmailutils/tests/decode2047.c36
-rw-r--r--libmailutils/tests/encode2047.c43
-rw-r--r--libmailutils/tests/fsfolder.c60
-rw-r--r--libmailutils/tests/globtest.c55
-rw-r--r--libmailutils/tests/imapio.at2
-rw-r--r--libmailutils/tests/imapio.c56
-rw-r--r--libmailutils/tests/mailcap.c61
-rw-r--r--libmailutils/tests/mcf.c49
-rw-r--r--libmailutils/tests/modmesg.c134
-rw-r--r--libmailutils/tests/msgset.c187
-rw-r--r--libmailutils/tests/scantime.c39
-rw-r--r--libmailutils/tests/stream-getdelim.c6
-rw-r--r--libmailutils/tests/strerr.at22
-rw-r--r--libmailutils/tests/strftime.c62
-rw-r--r--libmailutils/tests/strin.c74
-rw-r--r--libmailutils/tests/strout.at22
-rw-r--r--libmailutils/tests/strout.c77
-rw-r--r--libmailutils/tests/t-streamshift.c336
-rw-r--r--libmailutils/tests/t0-stream.c2
-rw-r--r--libmailutils/tests/temp_stream.c50
-rw-r--r--libmailutils/tests/tempfile.c130
23 files changed, 858 insertions, 742 deletions
diff --git a/libmailutils/tests/cidr.c b/libmailutils/tests/cidr.c
index 20e18b0fc..febf92f08 100644
--- a/libmailutils/tests/cidr.c
+++ b/libmailutils/tests/cidr.c
@@ -30,36 +30,40 @@ print_bytes (unsigned char *b, size_t l)
printf ("\n");
}
+static int ipv6_simplify;
+
+struct mu_option options[] = {
+ { "simplify", 's', NULL, MU_OPTION_DEFAULT,
+ "simplify IPv6 addresses", mu_c_bool, &ipv6_simplify },
+ MU_OPTION_END
+};
+
int
main (int argc, char **argv)
{
- int flags = 0;
-
mu_set_program_name (argv[0]);
- if (argc < 2)
+ mu_cli_simple (argc, argv,
+ MU_CLI_OPTION_OPTIONS, options,
+ MU_CLI_OPTION_PROG_DOC, "cidr test tool",
+ MU_CLI_OPTION_PROG_ARGS, "CIDR [CIDR...]",
+ MU_CLI_OPTION_RETURN_ARGC, &argc,
+ MU_CLI_OPTION_RETURN_ARGV, &argv,
+ MU_CLI_OPTION_END);
+
+ if (argc == 0)
{
- mu_error ("usage: %s [-sS] CIDR [CIDR...]", argv[0]);
+ mu_error ("required argument missing; try %s --help for more info",
+ mu_program_name);
return 1;
}
- while (--argc)
+ while (argc--)
{
- char *arg = *++argv;
+ char *arg = *argv++;
struct mu_cidr cidr;
int rc;
char *str;
- if (strcmp (arg, "-s") == 0)
- {
- flags |= MU_CIDR_FMT_SIMPLIFY;
- continue;
- }
- else if (strcmp (arg, "-S") == 0)
- {
- flags &= ~MU_CIDR_FMT_SIMPLIFY;
- continue;
- }
-
rc = mu_cidr_from_string (&cidr, arg);
if (rc)
{
@@ -74,10 +78,11 @@ main (int argc, char **argv)
print_bytes (cidr.address, cidr.len);
printf ("netmask =");
print_bytes (cidr.netmask, cidr.len);
- rc = mu_cidr_format (&cidr, flags, &str);
+ rc = mu_cidr_format (&cidr, ipv6_simplify ? MU_CIDR_FMT_SIMPLIFY : 0,
+ &str);
if (rc)
{
- mu_error ("cannot covert to string: %s", mu_strerror (rc));
+ mu_error ("cannot convert to string: %s", mu_strerror (rc));
return 2;
}
diff --git a/libmailutils/tests/debugspec.c b/libmailutils/tests/debugspec.c
index 9c6feaabc..f99b720dd 100644
--- a/libmailutils/tests/debugspec.c
+++ b/libmailutils/tests/debugspec.c
@@ -29,47 +29,35 @@ main (int argc, char **argv)
{
char *names = NULL;
int showunset = 0;
- char *arg;
+ struct mu_option options[] = {
+ { "names", 0, "NAME[;NAME...]", MU_OPTION_DEFAULT,
+ "show only selected categories", mu_c_string, &names },
+ { "showunset", 0, NULL, MU_OPTION_DEFAULT,
+ "show unset debug categories as well", mu_c_incr, &showunset },
+ MU_OPTION_END
+ };
mu_set_program_name (argv[0]);
mu_stdstream_setup (MU_STDSTREAM_RESET_NONE);
- if (argc == 1)
+ mu_cli_simple (argc, argv,
+ MU_CLI_OPTION_SINGLE_DASH,
+ MU_CLI_OPTION_OPTIONS, options,
+ MU_CLI_OPTION_PROG_DOC, "Mailutils debug specification test tool",
+ MU_CLI_OPTION_PROG_ARGS, "SPEC",
+ MU_CLI_OPTION_RETURN_ARGC, &argc,
+ MU_CLI_OPTION_RETURN_ARGV, &argv,
+ MU_CLI_OPTION_END);
+
+
+ if (argc != 1)
{
- mu_printf ("usage: %s spec\n", argv[0]);
+ mu_error ("exactly one argument expected; try %s -help for more info",
+ mu_program_name);
return 0;
}
- while (argc--)
- {
- arg = *++argv;
-
- if (strncmp (arg, "-names=", 7) == 0)
- names = arg + 7;
- else if (strcmp (arg, "-showunset") == 0)
- showunset = 1;
- else if (arg[0] == '-')
- {
- if (arg[1] == '-' && arg[2] == 0)
- {
- argc--;
- argv++;
- break;
- }
- mu_error ("unrecognised argument: %s", arg);
- return 1;
- }
- else
- break;
- }
-
- if (argc != 1)
- {
- mu_error ("usage: %s spec", mu_program_name);
- return 1;
- }
-
- mu_debug_parse_spec (arg);
+ mu_debug_parse_spec (argv[0]);
mu_debug_format_spec (mu_strout, names, showunset);
mu_printf ("\n");
diff --git a/libmailutils/tests/decode2047.c b/libmailutils/tests/decode2047.c
index 2e3c13325..d2cf185aa 100644
--- a/libmailutils/tests/decode2047.c
+++ b/libmailutils/tests/decode2047.c
@@ -20,19 +20,14 @@
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
-#include <string.h>
-
#include <mailutils/mailutils.h>
-#define ISPRINT(c) ((c)=='\t'||(c)==' '||(c)=='\n'||\
- ((unsigned char)(c)>' '&&(unsigned char)(c)<128))
-
void
print (char *p, int printable)
{
for (; *p; p++)
{
- if (printable && *p != '\n' && !ISPRINT (*p))
+ if (printable && *p != '\n' && !mu_isprint (*p))
printf ("\\%03o", *(unsigned char *) p);
else
putchar (*p);
@@ -43,23 +38,22 @@ int
main (int argc, char *argv[])
{
char buf[256];
- int c, printable = 0;
+ int printable = 0;
char *charset = "iso-8859-1";
-
- while ((c = getopt (argc, argv, "c:p")) != EOF)
- switch (c)
- {
- case 'c':
- charset = optarg;
- break;
- case 'p':
- printable = 1;
- break;
-
- default:
- exit (1);
- }
+ struct mu_option options[] = {
+ { "charset", 'c', "NAME", MU_OPTION_DEFAULT,
+ "define output character set", mu_c_string, &charset },
+ { "printable", 'p', NULL, MU_OPTION_DEFAULT,
+ "make sure the output is printable", mu_c_incr, &printable },
+ MU_OPTION_END
+ };
+ mu_set_program_name (argv[0]);
+ mu_cli_simple (argc, argv,
+ MU_CLI_OPTION_OPTIONS, options,
+ MU_CLI_OPTION_PROG_DOC, "Test RFC 2047 decoding function",
+ MU_CLI_OPTION_END);
+
while (fgets (buf, sizeof (buf), stdin))
{
char *p = NULL;
diff --git a/libmailutils/tests/encode2047.c b/libmailutils/tests/encode2047.c
index 5ee89e1a9..1880efd8c 100644
--- a/libmailutils/tests/encode2047.c
+++ b/libmailutils/tests/encode2047.c
@@ -110,35 +110,24 @@ main (int argc, char *argv[])
char *charset = "iso-8859-1";
char *encoding = "quoted-printable";
int octal = 0;
-
- while ((rc = getopt (argc, argv, "c:e:hot")) != EOF)
- switch (rc)
- {
- case 'c':
- charset = optarg;
- break;
-
- case 'e':
- encoding = optarg;
- break;
-
- case 'o':
- octal = 1;
- break;
-
- case 't':
- octal = 0;
- break;
-
- case 'h':
- printf ("usage: %s [-c charset] [-e encoding] [-ot]\n", argv[0]);
- exit (0);
-
- default:
- exit (1);
- }
+ struct mu_option options[] = {
+ { "charset", 'c', "NAME", MU_OPTION_DEFAULT,
+ "define input character set", mu_c_string, &charset },
+ { "encoding", 'e', "NAME", MU_OPTION_DEFAULT,
+ "define input encoding", mu_c_string, &encoding },
+ { "octal", 'o', NULL, MU_OPTION_DEFAULT,
+ "decode octal escape notations on input", mu_c_bool, &octal },
+ MU_OPTION_END
+ };
+ mu_set_program_name (argv[0]);
mu_stdstream_setup (MU_STDSTREAM_RESET_NONE);
+ mu_cli_simple (argc, argv,
+ MU_CLI_OPTION_OPTIONS, options,
+ MU_CLI_OPTION_PROG_DOC, "Test RFC 2047 encoding function",
+ MU_CLI_OPTION_EXTRA_INFO, "Defaults are: --charset=iso-8859-1 --encoding=quoted-printable",
+ MU_CLI_OPTION_END);
+
while ((rc = mu_stream_getline (mu_strin, &buf, &size, &n)) == 0 && n > 0)
{
char *p;
diff --git a/libmailutils/tests/fsfolder.c b/libmailutils/tests/fsfolder.c
index 7e0952f4c..97350570e 100644
--- a/libmailutils/tests/fsfolder.c
+++ b/libmailutils/tests/fsfolder.c
@@ -33,6 +33,7 @@
#include <mailutils/sys/registrar.h>
#include <mailutils/assoc.h>
#include <mailutils/iterator.h>
+#include <mailutils/cli.h>
#include "tesh.h"
int sort_option;
@@ -227,16 +228,6 @@ static struct mu_tesh_command comtab[] = {
{ NULL }
};
-static void
-usage (void)
-{
- mu_printf (
- "usage: %s [-debug=SPEC] -name=URL [-sort] [-glob] OP ARG... [\\; OP ARG...]...]\n",
- mu_program_name);
- mu_printf ("OPerations and corresponding ARGuments are:\n");
- mu_tesh_help (comtab, NULL);
-}
-
static int
_always_is_scheme (mu_record_t record, mu_url_t url, int flags)
{
@@ -314,39 +305,42 @@ static struct _mu_record reg_record =
int
main (int argc, char **argv)
{
- int i;
int rc;
mu_folder_t folder;
char *fname = NULL;
int glob_option = 0;
-
+ struct mu_option options[] = {
+ { "name", 0, "NAME-OR-URL", MU_OPTION_DEFAULT,
+ "set file name (mandatory)", mu_c_string, &fname },
+ { "sort", 0, NULL, MU_OPTION_DEFAULT,
+ "sort folders", mu_c_incr, &sort_option },
+ { "glob", 0, NULL, MU_OPTION_DEFAULT,
+ "assume globbing patterns", mu_c_incr, &glob_option },
+ MU_OPTION_END
+ };
+ char *capa[] = { "debug", NULL };
+
+ mu_set_program_name (argv[0]);
mu_tesh_init (argv[0]);
mu_registrar_record (&any_record);
mu_registrar_record (&reg_record);
- if (argc == 1)
- {
- usage ();
- exit (0);
- }
-
- for (i = 1; i < argc; i++)
- {
- if (strncmp (argv[i], "-debug=", 7) == 0)
- mu_debug_parse_spec (argv[i] + 7);
- else if (strncmp (argv[i], "-name=", 6) == 0)
- fname = argv[i] + 6;
- else if (strcmp (argv[i], "-sort") == 0)
- sort_option = 1;
- else if (strcmp (argv[i], "-glob") == 0)
- glob_option = 1;
- else
- break;
- }
+ mu_cli_simple (argc, argv,
+ MU_CLI_OPTION_SINGLE_DASH,
+ MU_CLI_OPTION_IN_ORDER,
+ MU_CLI_OPTION_OPTIONS, options,
+ MU_CLI_OPTION_CAPABILITIES, capa,
+ MU_CLI_OPTION_RETURN_ARGC, &argc,
+ MU_CLI_OPTION_RETURN_ARGV, &argv,
+ MU_CLI_OPTION_PROG_DOC, "Test file system folder traversal",
+ MU_CLI_OPTION_PROG_ARGS, "[OP ARG... [\\; OP ARG...]...]",
+ MU_CLI_OPTION_END);
+
if (!fname)
{
- mu_error ("name not specified");
+ mu_error ("-name not specified; try %s -help for more info",
+ mu_program_name);
exit (1);
}
@@ -376,7 +370,7 @@ main (int argc, char **argv)
if (glob_option)
mu_folder_set_match (folder, mu_folder_glob_match);
- mu_tesh_read_and_eval (argc - i, argv + i, comtab, folder);
+ mu_tesh_read_and_eval (argc, argv, comtab, folder);
mu_folder_close (folder);
mu_folder_destroy (&folder);
diff --git a/libmailutils/tests/globtest.c b/libmailutils/tests/globtest.c
index a95505754..d44e4cdd9 100644
--- a/libmailutils/tests/globtest.c
+++ b/libmailutils/tests/globtest.c
@@ -26,37 +26,42 @@ main (int argc, char **argv)
int flags = 0;
int rc;
int i;
-
+ int sub_opt = 0, icase_opt = 0, collapse_opt = 0;
+ struct mu_option options[] = {
+ { "icase", 'i', NULL, MU_OPTION_DEFAULT,
+ "ignore case", mu_c_incr, &icase_opt },
+ { "sub", 's', NULL, MU_OPTION_DEFAULT,
+ "treat each wildcard as regexp parenthesized group",
+ mu_c_incr, &sub_opt },
+ { "collapse", 'c', NULL, MU_OPTION_DEFAULT,
+ "collapse contiguous runs of *", mu_c_incr, &collapse_opt },
+ MU_OPTION_END
+ };
+
mu_set_program_name (argv[0]);
- for (i = 1; i < argc; i++)
- {
- char *a = argv[i];
- if (strcmp (a, "-i") == 0)
- flags |= MU_GLOBF_ICASE;
- else if (strcmp (a, "-s") == 0)
- flags |= MU_GLOBF_SUB;
- else if (strcmp (a, "-c") == 0)
- flags |= MU_GLOBF_COLLAPSE;
- else if (strcmp (a, "--") == 0)
- {
- i++;
- break;
- }
- else if (*a != '-')
- break;
- else
- {
- mu_error ("unknown option %s", a);
- return 1;
- }
- }
+ mu_cli_simple (argc, argv,
+ MU_CLI_OPTION_OPTIONS, options,
+ MU_CLI_OPTION_PROG_DOC, "convert globbing pattern to regexp",
+ MU_CLI_OPTION_PROG_ARGS, "PATTERN [STRING ...]",
+ MU_CLI_OPTION_RETURN_ARGC, &argc,
+ MU_CLI_OPTION_RETURN_ARGV, &argv,
+ MU_CLI_OPTION_END);
+
+ if (icase_opt)
+ flags |= MU_GLOBF_ICASE;
+ if (sub_opt)
+ flags |= MU_GLOBF_SUB;
+ if (collapse_opt)
+ flags |= MU_GLOBF_COLLAPSE;
- if (i == argc)
+ if (argc == 0)
{
- mu_printf ("usage: %s [-ics] PATTERN [WORD...]\n", mu_program_name);
+ mu_error ("pattern must be given; try %s --help for details",
+ mu_program_name);
return 1;
}
+ i = 0;
pattern = argv[i++];
if (i == argc)
diff --git a/libmailutils/tests/imapio.at b/libmailutils/tests/imapio.at
index 779d33351..3a0ea9016 100644
--- a/libmailutils/tests/imapio.at
+++ b/libmailutils/tests/imapio.at
@@ -93,7 +93,7 @@ fat man
3: 'fat man'
])
-m4_pushdef([IMAPIO_FLAGS],[-server])
+m4_pushdef([IMAPIO_FLAGS],[--server])
IMAPIO([literals (server)],[literal],
[A001 LOGIN {11}
FRED FOOBAR {7}
diff --git a/libmailutils/tests/imapio.c b/libmailutils/tests/imapio.c
index bcccc95d7..4746f4a17 100644
--- a/libmailutils/tests/imapio.c
+++ b/libmailutils/tests/imapio.c
@@ -25,14 +25,7 @@
#include <mailutils/error.h>
#include <mailutils/stream.h>
#include <mailutils/stdstream.h>
-
-void
-usage ()
-{
- mu_stream_printf (mu_strout, "usage: %s [debug=SPEC] [-transcript] [-server]\n",
- mu_program_name);
- exit (0);
-}
+#include <mailutils/cli.h>
int
main (int argc, char **argv)
@@ -41,31 +34,32 @@ main (int argc, char **argv)
int transcript = 0;
mu_imapio_t io;
mu_stream_t str;
- int imapio_mode = MU_IMAPIO_CLIENT;
+ int imapio_mode;
+ int server_opt = 0;
+ struct mu_option options[] = {
+ { "transcript", 't', NULL, MU_OPTION_DEFAULT,
+ "enable transcript", mu_c_incr, &transcript },
+ { "server", 's', NULL, MU_OPTION_DEFAULT,
+ "server mode", mu_c_incr, &server_opt },
+ MU_OPTION_END
+ };
+ char *capa[] = { "debug", NULL };
+ mu_stream_t dstr;
+ int t = 1;
- mu_stdstream_setup (MU_STDSTREAM_RESET_NONE);
-
- for (i = 1; i < argc; i++)
- {
- char *opt = argv[i];
+ /* Create a separate diagnostic stream, independent from mu_strerr */
+ MU_ASSERT (mu_stdio_stream_create (&dstr, MU_STDERR_FD, 0));
+ mu_stream_ioctl (dstr, MU_IOCTL_FD, MU_IOCTL_FD_SET_BORROW, &t);
- if (strncmp (opt, "debug=", 6) == 0)
- mu_debug_parse_spec (opt + 6);
- else if (strcmp (opt, "-transcript") == 0)
- transcript = 1;
- else if (strcmp (opt, "-server") == 0)
- imapio_mode = MU_IMAPIO_SERVER;
- else if (strcmp (opt, "-h") == 0)
- usage ();
- else
- {
- mu_error ("%s: unrecognized argument", opt);
- exit (1);
- }
- }
+ mu_cli_simple (argc, argv,
+ MU_CLI_OPTION_OPTIONS, options,
+ MU_CLI_OPTION_CAPABILITIES, capa,
+ MU_CLI_OPTION_PROG_DOC, "imap parser test tool",
+ MU_CLI_OPTION_END);
- MU_ASSERT (mu_iostream_create (&str, mu_strin, mu_strout));
+ imapio_mode = server_opt ? MU_IMAPIO_SERVER : MU_IMAPIO_CLIENT;
+ MU_ASSERT (mu_iostream_create (&str, mu_strin, mu_strout));
MU_ASSERT (mu_imapio_create (&io, str, imapio_mode));
@@ -82,10 +76,10 @@ main (int argc, char **argv)
if (wc == 0)
break;
- mu_stream_printf (mu_strerr, "%lu\n", (unsigned long) wc);
+ mu_stream_printf (dstr, "%lu\n", (unsigned long) wc);
for (i = 0; i < wc; i++)
{
- mu_stream_printf (mu_strerr, "%d: '%s'\n", i, wv[i]);
+ mu_stream_printf (dstr, "%d: '%s'\n", i, wv[i]);
}
}
diff --git a/libmailutils/tests/mailcap.c b/libmailutils/tests/mailcap.c
index 17e95ce8d..229b91a3e 100644
--- a/libmailutils/tests/mailcap.c
+++ b/libmailutils/tests/mailcap.c
@@ -31,6 +31,13 @@ static void list_single_entry (mu_mailcap_entry_t ent);
static int list_field (char const *name, char const *value, void *data);
static int list_entry (mu_mailcap_entry_t ent, void *closure);
+static void
+cli_locus (struct mu_parseopt *po, struct mu_option *opt, char const *arg)
+{
+ int *pflag = opt->opt_ptr;
+ *pflag |= MU_MAILCAP_FLAG_LOCUS;
+}
+
/* usage:
mailcap [-f FILE]
List entries
@@ -46,39 +53,29 @@ main (int argc, char **argv)
int flags = MU_MAILCAP_FLAG_DEFAULT;
mu_mailcap_t mailcap;
char *file = NULL;
- char *arg;
-
- mu_stdstream_setup (MU_STDSTREAM_RESET_NONE);
-
- while (--argc && (arg = *++argv)[0] == '-')
- {
- if (strcmp (arg, "--") == 0)
- {
- argc--;
- argv++;
- break;
- }
- else if (strncmp (arg, "-f", 2) == 0)
- {
- if (arg[2])
- file = arg + 2;
- else if (--argc)
- file = *++argv;
- else
- {
- mu_error ("-f requires arguments");
- return 1;
- }
- }
- else if (strcmp (arg, "-l") == 0)
- flags |= MU_MAILCAP_FLAG_LOCUS;
- else
- {
- mu_error ("unrecognized option: %s", arg);
- return 1;
- }
- }
+ struct mu_option options[] = {
+ { "file", 'f', "NAME", MU_OPTION_DEFAULT,
+ "mailcap file name", mu_c_string, &file },
+ { "locus", 'l', NULL, MU_OPTION_DEFAULT,
+ "record location of each entry in the source file",
+ mu_c_incr, &flags, cli_locus },
+ MU_OPTION_END
+ };
+
+ mu_set_program_name (argv[0]);
+ mu_cli_simple (argc, argv,
+ MU_CLI_OPTION_OPTIONS, options,
+ MU_CLI_OPTION_PROG_DOC,
+ "mailcap test: without arguments lists all mailcap entries, "
+ "with single argument, prints the first entry matching TYPE, "
+ "with two arguments prints FIELD from the first entry "
+ "matching TYPE.",
+ MU_CLI_OPTION_PROG_ARGS, "[TYPE [FIELD]]",
+ MU_CLI_OPTION_RETURN_ARGC, &argc,
+ MU_CLI_OPTION_RETURN_ARGV, &argv,
+ MU_CLI_OPTION_END);
+
MU_ASSERT (mu_mailcap_create (&mailcap));
mu_mailcap_set_error (mailcap, &mu_mailcap_default_error_closure);
if (flags != MU_MAILCAP_FLAG_DEFAULT)
diff --git a/libmailutils/tests/mcf.c b/libmailutils/tests/mcf.c
index e2085f9f5..406dda381 100644
--- a/libmailutils/tests/mcf.c
+++ b/libmailutils/tests/mcf.c
@@ -39,6 +39,13 @@ selector (mu_mailcap_entry_t entry, void *data)
static void list_entry (mu_mailcap_entry_t ent, unsigned long n);
+static void
+cli_locus (struct mu_parseopt *po, struct mu_option *opt, char const *arg)
+{
+ int *pflag = opt->opt_ptr;
+ *pflag |= MU_MAILCAP_FLAG_LOCUS;
+}
+
int
main (int argc, char **argv)
{
@@ -49,31 +56,29 @@ main (int argc, char **argv)
mu_mailcap_entry_t entry;
size_t n;
int flags = MU_MAILCAP_FLAG_DEFAULT;
- char *arg;
-
- mu_stdstream_setup (MU_STDSTREAM_RESET_NONE);
-
- while (--argc && (arg = *++argv)[0] == '-')
- {
- if (strcmp (arg, "--") == 0)
- {
- argc--;
- argv++;
- break;
- }
- else if (strcmp (arg, "-l") == 0)
- flags |= MU_MAILCAP_FLAG_LOCUS;
- else
- {
- mu_error ("unrecognized option: %s", arg);
- usage (mu_strerr);
- return 1;
- }
- }
+ struct mu_option options[] = {
+ { "locus", 'l', NULL, MU_OPTION_DEFAULT,
+ "record location of each entry in the source file",
+ mu_c_incr, &flags, cli_locus },
+ MU_OPTION_END
+ };
+
+ mu_set_program_name (argv[0]);
+ mu_cli_simple (argc, argv,
+ MU_CLI_OPTION_OPTIONS, options,
+ MU_CLI_OPTION_PROG_DOC,
+ "extracts entries matching TYPE/SUBTYPE from the "
+ "given mailcap FILEs",
+ MU_CLI_OPTION_PROG_ARGS, "TYPE/SUBTYPE FILE...",
+ MU_CLI_OPTION_RETURN_ARGC, &argc,
+ MU_CLI_OPTION_RETURN_ARGV, &argv,
+ MU_CLI_OPTION_END);
+
if (argc < 2)
{
- usage (mu_strerr);
+ mu_error ("required arguments missing; try %s --help for assistance",
+ mu_program_name);
return 1;
}
type = argv[0];
diff --git a/libmailutils/tests/modmesg.c b/libmailutils/tests/modmesg.c
index f6dd28006..a7adc6793 100644
--- a/libmailutils/tests/modmesg.c
+++ b/libmailutils/tests/modmesg.c
@@ -23,16 +23,84 @@ This is a test message.\n\
oo\n\
";
+static void
+cli_a (struct mu_parseopt *po, struct mu_option *opt, char const *arg)
+{
+ mu_header_t *hdr = opt->opt_ptr;
+ char *p;
+
+ p = strchr (arg, ':');
+ if (!p)
+ {
+ mu_parseopt_error (po, "%s: invalid append header format", arg);
+ exit (po->po_exit_error);
+ }
+
+ *p++ = 0;
+ while (*p && mu_isspace (*p))
+ p++;
+ MU_ASSERT (mu_header_set_value (*hdr, arg, p, 1));
+}
+
+static void
+cli_t (struct mu_parseopt *po, struct mu_option *opt, char const *arg)
+{
+ mu_stream_t *stream = opt->opt_ptr;
+ mu_wordsplit_t ws;
+
+ if (mu_wordsplit (arg, &ws,
+ MU_WRDSF_NOSPLIT | MU_WRDSF_DEFFLAGS))
+ {
+ mu_parseopt_error (po, "mu_wordsplit: %s", mu_wordsplit_strerror (&ws));
+ exit (po->po_exit_error);
+ }
+ else
+ MU_ASSERT (mu_stream_write (*stream, ws.ws_wordv[0],
+ strlen (ws.ws_wordv[0]), NULL));
+ mu_wordsplit_free (&ws);
+}
+
+static void
+cli_l (struct mu_parseopt *po, struct mu_option *opt, char const *arg)
+{
+ mu_stream_t *stream = opt->opt_ptr;
+ mu_off_t off;
+ int whence = MU_SEEK_SET;
+ char *p;
+
+ errno = 0;
+ off = strtol (arg, &p, 10);
+ if (errno || *p)
+ {
+ mu_parseopt_error (po, "%s: invalid offset", arg);
+ exit (po->po_exit_error);
+ }
+
+ if (off < 0)
+ whence = MU_SEEK_END;
+ MU_ASSERT (mu_stream_seek (*stream, off, whence, NULL));
+}
+
int
main (int argc, char **argv)
{
- int i;
- char *p;
mu_message_t msg;
mu_stream_t stream = NULL;
mu_header_t hdr;
mu_body_t body;
-
+
+ struct mu_option options[] = {
+ { "add-header", 'a', "HDR:VAL", MU_OPTION_DEFAULT,
+ "add header to the message", mu_c_string, &hdr, cli_a },
+ { "seek", 'l', "OFF", MU_OPTION_DEFAULT,
+ "seek to the given position in message stream", mu_c_string, &stream,
+ cli_l },
+ { "text", 't', "TEXT", MU_OPTION_DEFAULT,
+ "write given text to the message stream in current position",
+ mu_c_string, &stream, cli_t },
+ MU_OPTION_END
+ };
+
mu_set_program_name (argv[0]);
mu_static_memory_stream_create (&stream, text, strlen (text));
@@ -42,59 +110,13 @@ main (int argc, char **argv)
MU_ASSERT (mu_message_get_body (msg, &body));
MU_ASSERT (mu_body_get_streamref (body, &stream));
MU_ASSERT (mu_stream_seek (stream, 0, MU_SEEK_END, NULL));
-
- for (i = 1; i < argc; i++)
- {
- if (strcmp (argv[i], "-h") == 0)
- {
- mu_printf ("usage: %s [-a HDR:VAL] [-t TEXT]\n", mu_program_name);
- return 0;
- }
-
- if (strcmp (argv[i], "-a") == 0)
- {
- i++;
- assert (argv[i] != NULL);
- p = strchr (argv[i], ':');
- assert (p != NULL);
- *p++ = 0;
- while (*p && mu_isspace (*p))
- p++;
- MU_ASSERT (mu_header_set_value (hdr, argv[i], p, 1));
- }
- else if (strcmp (argv[i], "-l") == 0)
- {
- mu_off_t off;
- int whence = MU_SEEK_SET;
-
- i++;
- assert (argv[i] != NULL);
- off = strtol (argv[i], &p, 10);
- assert (*p == 0);
- if (off < 0)
- whence = MU_SEEK_END;
- MU_ASSERT (mu_stream_seek (stream, off, whence, NULL));
- }
- else if (strcmp (argv[i], "-t") == 0)
- {
- mu_wordsplit_t ws;
- i++;
- assert (argv[i] != NULL);
-
- if (mu_wordsplit (argv[i], &ws,
- MU_WRDSF_NOSPLIT | MU_WRDSF_DEFFLAGS))
- {
- mu_error ("mu_wordsplit: %s", mu_wordsplit_strerror (&ws));
- exit (1);
- }
- else
- MU_ASSERT (mu_stream_write (stream, ws.ws_wordv[0],
- strlen (ws.ws_wordv[0]), NULL));
- mu_wordsplit_free (&ws);
- }
- else
- mu_error ("ignoring unknown argument %s", argv[i]);
- }
+
+ //parse arguments
+ mu_cli_simple (argc, argv,
+ MU_CLI_OPTION_OPTIONS, options,
+ MU_CLI_OPTION_PROG_DOC, "test message modifications",
+ MU_CLI_OPTION_END);
+
mu_stream_unref (stream);
MU_ASSERT (mu_message_get_streamref (msg, &stream));
diff --git a/libmailutils/tests/msgset.c b/libmailutils/tests/msgset.c
index ea4469fde..6c519f8a8 100644
--- a/libmailutils/tests/msgset.c
+++ b/libmailutils/tests/msgset.c
@@ -21,7 +21,7 @@
mu_msgset_format_t format = mu_msgset_fmt_imap;
static void
-parse_msgrange (char *arg, struct mu_msgrange *range)
+parse_msgrange (char const *arg, struct mu_msgrange *range)
{
size_t msgnum;
char *p;
@@ -98,88 +98,125 @@ print_last (mu_msgset_t msgset)
printf ("%zu\n", n);
}
-int
-main (int argc, char **argv)
+static void
+cli_msgset (struct mu_parseopt *po, struct mu_option *opt, char const *arg)
{
- int i;
- char *msgset_string = NULL;
- mu_msgset_t msgset;
- void (*print) (mu_msgset_t) = print_all;
-
- mu_set_program_name (argv[0]);
- for (i = 1; i < argc; i++)
+ mu_msgset_t *msgset = opt->opt_ptr;
+ if (*msgset)
{
- char *arg = argv[i];
+ mu_parseopt_error (po, "message set already defined");
+ exit (po->po_exit_error);
+ }
+ *msgset = parse_msgset (arg);
+}
- if (strcmp (arg, "-h") == 0 || strcmp (arg, "-help") == 0)
- {
- mu_printf ("usage: %s [-mh] [-msgset=SET] [-add=X[:Y]] [-del=X[:Y]] "
- "[-addset=SET] [-delset=SET] [-first] [-last] ...\n",
- mu_program_name);
- return 0;
- }
- else if (strncmp (arg, "-msgset=", 8) == 0)
- msgset_string = arg + 8;
- else if (strcmp (arg, "-mh") == 0)
- format = mu_msgset_fmt_mh;
- else
- break;
+static void
+cli_mh (struct mu_parseopt *po, struct mu_option *opt, char const *arg)
+{
+ format = mu_msgset_fmt_mh;
+}
+
+static mu_msgset_t
+get_msgset (struct mu_option *opt)
+{
+ mu_msgset_t *msgset = opt->opt_ptr;
+ if (!*msgset)
+ {
+ *msgset = parse_msgset (NULL);
}
+ return *msgset;
+}
+
+static void
+cli_add (struct mu_parseopt *po, struct mu_option *opt, char const *arg)
+{
+ struct mu_msgrange range;
+ parse_msgrange (arg, &range);
+ MU_ASSERT (mu_msgset_add_range (get_msgset (opt), range.msg_beg,
+ range.msg_end, MU_MSGSET_NUM));
+}
+
+static void
+cli_sub (struct mu_parseopt *po, struct mu_option *opt, char const *arg)
+{
+ struct mu_msgrange range;
+ parse_msgrange (arg, &range);
+ MU_ASSERT (mu_msgset_sub_range (get_msgset (opt), range.msg_beg,
+ range.msg_end, MU_MSGSET_NUM));
+}
+
+static void
+cli_addset (struct mu_parseopt *po, struct mu_option *opt, char const *arg)
+{
+ mu_msgset_t tset = parse_msgset (arg);
+ MU_ASSERT (mu_msgset_add (get_msgset (opt), tset));
+ mu_msgset_free (tset);
+}
+
+static void
+cli_subset (struct mu_parseopt *po, struct mu_option *opt, char const *arg)
+{
+ mu_msgset_t tset = parse_msgset (arg);
+ MU_ASSERT (mu_msgset_sub (get_msgset (opt), tset));
+ mu_msgset_free (tset);
+}
- msgset = parse_msgset (msgset_string);
+static void
+cli_first (struct mu_parseopt *po, struct mu_option *opt, char const *arg)
+{
+ void (**print) (mu_msgset_t) = opt->opt_ptr;
+ *print = print_first;
+}
+