Mercurial > dovecot > core-2.2
view src/doveadm/doveadm.c @ 10582:615eef3139c2 HEAD
Updated copyright notices to include year 2010.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 25 Jan 2010 01:19:08 +0200 |
parents | 93c87044469f |
children | e71eb3faa075 |
line wrap: on
line source
/* Copyright (c) 2009-2010 Dovecot authors, see the included COPYING file */ #include "lib.h" #include "array.h" #include "master-service.h" #include "doveadm-mail.h" #include "doveadm.h" #include <stdio.h> #include <stdlib.h> #include <unistd.h> bool doveadm_verbose = FALSE, doveadm_debug = FALSE; static ARRAY_DEFINE(doveadm_cmds, struct doveadm_cmd); void doveadm_register_cmd(const struct doveadm_cmd *cmd) { array_append(&doveadm_cmds, cmd, 1); } void usage(void) { const struct doveadm_cmd *cmd; fprintf(stderr, "usage: doveadm\n"); array_foreach(&doveadm_cmds, cmd) { fprintf(stderr, USAGE_CMDNAME_FMT" %s\n", cmd->name, cmd->short_usage); } doveadm_mail_usage(); exit(1); } void help(const struct doveadm_cmd *cmd) { fprintf(stderr, "doveadm %s %s\n", cmd->name, cmd->short_usage); if (cmd->long_usage != NULL) fprintf(stderr, "%s", cmd->long_usage); exit(0); } static void cmd_help(int argc ATTR_UNUSED, char *argv[]) { const struct doveadm_cmd *cmd; if (argv[1] == NULL) usage(); array_foreach(&doveadm_cmds, cmd) { if (strcmp(cmd->name, argv[1]) == 0) help(cmd); } doveadm_mail_help_name(argv[1]); usage(); } static struct doveadm_cmd doveadm_cmd_help = { cmd_help, "help", "<cmd>", NULL }; static bool doveadm_try_run(const char *cmd_name, int argc, char *argv[]) { const struct doveadm_cmd *cmd; array_foreach(&doveadm_cmds, cmd) { if (strcmp(cmd_name, cmd->name) == 0) { cmd->cmd(argc, argv); return TRUE; } } return FALSE; } int main(int argc, char *argv[]) { const char *cmd_name; int c; /* "+" is GNU extension to stop at the first non-option. others just accept -+ option. */ master_service = master_service_init("doveadm", MASTER_SERVICE_FLAG_STANDALONE, &argc, &argv, "+Dv"); i_array_init(&doveadm_cmds, 32); doveadm_mail_init(); doveadm_register_cmd(&doveadm_cmd_help); doveadm_register_cmd(&doveadm_cmd_auth); doveadm_register_cmd(&doveadm_cmd_user); doveadm_register_cmd(&doveadm_cmd_dump); doveadm_register_cmd(&doveadm_cmd_pw); doveadm_register_cmd(&doveadm_cmd_who); while ((c = master_getopt(master_service)) > 0) { switch (c) { case 'D': doveadm_debug = TRUE; doveadm_verbose = TRUE; break; case 'v': doveadm_verbose = TRUE; break; default: return FATAL_DEFAULT; } } if (optind == argc) usage(); cmd_name = argv[optind]; argc -= optind; argv += optind; optind = 1; master_service_init_finish(master_service); if (!doveadm_try_run(cmd_name, argc, argv) && !doveadm_mail_try_run(cmd_name, argc, argv)) usage(); master_service_deinit(&master_service); doveadm_mail_deinit(); array_free(&doveadm_cmds); return 0; }