/* GNU Mailutils -- a suite of utilities for electronic mail Copyright (C) 1999-2021 Free Software Foundation, Inc. GNU Mailutils is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Mailutils is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Mailutils. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include static int messages_count (const char *); /* are we loud or quiet? */ static int silent = 0; static struct mu_option messages_options[] = { { "quiet", 'q', NULL, MU_OPTION_DEFAULT, N_("only display number of messages"), mu_c_bool, &silent }, {"silent", 's', NULL, MU_OPTION_ALIAS }, MU_OPTION_END }; static char *capa[] = { "debug", "mailbox", "locking", NULL }; static struct mu_option *options[] = { messages_options, NULL }; struct mu_cli_setup cli = { options, NULL, N_("GNU messages -- count the number of messages in a mailbox"), N_("[mailbox...]") }; int main (int argc, char **argv) { int err = 0; /* Native Language Support */ MU_APP_INIT_NLS (); /* register the formats. */ mu_register_all_mbox_formats (); mu_auth_register_module (&mu_auth_tls_module); mu_cli (argc, argv, &cli, capa, NULL, &argc, &argv); if (argc == 0 && messages_count (NULL) < 0) err = 1; else if (argc >= 1) { size_t i; for (i = 0; i < argc; i++) { if (messages_count (argv[i]) < 0) err = 1; } } return err; } static int messages_count (const char *box) { mu_mailbox_t mbox; mu_url_t url = NULL; size_t count; int status = 0; status = mu_mailbox_create_default (&mbox, box); if (status != 0) { if (box) mu_error (_("could not create mailbox `%s': %s"), box, mu_strerror (status)); else mu_error (_("could not create default mailbox: %s"), mu_strerror (status)); return -1; } mu_mailbox_get_url (mbox, &url); box = mu_url_to_string (url); status = mu_mailbox_open (mbox, MU_STREAM_READ); if (status != 0) { mu_error (_("could not open mailbox `%s': %s"), box, mu_strerror (status)); return -1; } status = mu_mailbox_messages_count (mbox, &count); if (status != 0) { mu_error (_("could not count messages in mailbox `%s': %s"), box, mu_strerror (status)); return -1; } if (silent) mu_printf ("%lu\n", (unsigned long) count); else mu_printf (_("Number of messages in %s: %lu\n"), box, (unsigned long) count); status = mu_mailbox_close (mbox); if (status != 0) { mu_error (_("could not close `%s': %s"), box, mu_strerror (status)); return -1; } mu_mailbox_destroy (&mbox); return count; }