summaryrefslogtreecommitdiff
path: root/messages
diff options
context:
space:
mode:
authorJakob Kaivo <jkaivo@ndn.net>2001-07-21 05:04:57 +0000
committerJakob Kaivo <jkaivo@ndn.net>2001-07-21 05:04:57 +0000
commitf232e0e9d088ebea4f1c6e4577b48af3f720a5d1 (patch)
tree3567e6b5a7080fc738d3c8a2edf7ab4133ce8d7d /messages
parentd371d25cdae764ba7ccbfc9b654b22682c54b927 (diff)
downloadmailutils-f232e0e9d088ebea4f1c6e4577b48af3f720a5d1.tar.gz
mailutils-f232e0e9d088ebea4f1c6e4577b48af3f720a5d1.tar.bz2
add --slient/--quiet options, work properly if no args
Diffstat (limited to 'messages')
-rw-r--r--messages/messages.c102
1 files changed, 68 insertions, 34 deletions
diff --git a/messages/messages.c b/messages/messages.c
index ec07caa0c..e15ec6c4a 100644
--- a/messages/messages.c
+++ b/messages/messages.c
@@ -3,23 +3,48 @@
#include <stdio.h>
#include <argp.h>
+static int messages_count (char *);
+
const char *argp_program_version = "messages (" PACKAGE ") " VERSION;
const char *argp_program_bug_address = "<bug-mailutils@gnu.org>";
static char doc[] = "GNU messages -- count the number of messages in a mailbox";
static char args_doc[] = "[mailbox...]";
static struct argp_option options[] = {
+ {"quiet", 'q', 0, 0, "Only display number of messages"},
+ {"silent", 's', 0, 0, "Same as -q"},
{ 0 }
};
struct arguments
{
- char **args;
+ int argc;
+ char **argv;
};
+/* are we loud or quiet? */
+static int silent = 0;
+
static error_t
parse_opt (int key, char *arg, struct argp_state *state)
{
+ struct arguments *args = state->input;
+ switch (key)
+ {
+ case 'q':
+ case 's':
+ silent = 1;
+ break;
+ case ARGP_KEY_ARG:
+ args->argv = realloc (args->argv,
+ sizeof (char *) * (state->arg_num + 2));
+ args->argv[state->arg_num] = arg;
+ args->argv[state->arg_num + 1] = NULL;
+ args->argc++;
+ break;
+ default:
+ return ARGP_ERR_UNKNOWN;
+ }
return 0;
}
@@ -30,49 +55,58 @@ main (int argc, char **argv)
{
int i = 1;
list_t bookie;
- mailbox_t mbox;
- int count;
int err = 0;
- struct arguments args;
- args.args = NULL;
+ struct arguments args = {0, NULL};
argp_parse (&argp, argc, argv, 0, 0, &args);
registrar_get_list (&bookie);
list_append (bookie, path_record);
- /* FIXME: if argc < 2, check on $MAIL and exit */
-
- for (i=1; i < argc; i++)
+ if (args.argc < 1 && messages_count (getenv("MAIL")) < 0)
+ err = 1;
+ else if (args.argc >= 1)
{
- if (mailbox_create_default (&mbox, argv[i]) != 0)
- {
- fprintf (stderr, "Couldn't create mailbox %s.\n", argv[i]);
- err = 1;
- continue;
- }
- if (mailbox_open (mbox, MU_STREAM_READ) != 0)
- {
- fprintf (stderr, "Couldn't open mailbox %s.\n", argv[i]);
- err = 1;
- continue;
- }
- if (mailbox_messages_count (mbox, &count) != 0)
- {
- fprintf (stderr, "Couldn't count messages in %s.\n", argv[i]);
+ for (i=0; i < args.argc; i++)
+ if (messages_count (args.argv[i]) < 0)
err = 1;
- continue;
- }
+ }
- printf ("Number of messages in %s: %d\n", argv[i], count);
+ return err;
+}
- if (mailbox_close (mbox) != 0)
- {
- fprintf (stderr, "Couldn't close %s.\n", argv[i]);
- err = 1;
- continue;
- }
- mailbox_destroy (&mbox);
+static int
+messages_count (char *box)
+{
+ mailbox_t mbox;
+ int count;
+
+ if (mailbox_create_default (&mbox, box) != 0)
+ {
+ fprintf (stderr, "Couldn't create mailbox %s.\n", box);
+ return -1;
}
- return 0;
+ if (mailbox_open (mbox, MU_STREAM_READ) != 0)
+ {
+ fprintf (stderr, "Couldn't open mailbox %s.\n", box);
+ return -1;
+ }
+ if (mailbox_messages_count (mbox, &count) != 0)
+ {
+ fprintf (stderr, "Couldn't count messages in %s.\n", box);
+ return -1;
+ }
+
+ if (silent)
+ printf ("%d\n", count);
+ else
+ printf ("Number of messages in %s: %d\n", box, count);
+
+ if (mailbox_close (mbox) != 0)
+ {
+ fprintf (stderr, "Couldn't close %s.\n", box);
+ return -1;
+ }
+ mailbox_destroy (&mbox);
+ return count;
}

Return to:

Send suggestions and report system problems to the System administrator.