Mercurial > dovecot > core-2.2
changeset 10119:1e63221f5c83 HEAD
Moved most of getopt() handling to lib-master.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 20 Oct 2009 20:07:45 -0400 |
parents | 1ae1d47aaef8 |
children | b584904d3bc7 |
files | src/anvil/main.c src/auth/main.c src/config/doveconf.c src/config/main.c src/dict/main.c src/doveadm/doveadm.c src/dsync/dsync.c src/imap/main.c src/lda/main.c src/lib-master/master-service-private.h src/lib-master/master-service.c src/lib-master/master-service.h src/lmtp/main.c src/log/main.c src/login-common/main.c src/master/main.c src/plugins/convert/convert-tool.c src/plugins/expire/expire-tool.c src/pop3/main.c src/ssl-params/main.c |
diffstat | 20 files changed, 82 insertions(+), 138 deletions(-) [+] |
line wrap: on
line diff
--- a/src/anvil/main.c Tue Oct 20 19:44:57 2009 -0400 +++ b/src/anvil/main.c Tue Oct 20 20:07:45 2009 -0400 @@ -8,9 +8,6 @@ #include "connect-limit.h" #include "anvil-connection.h" -#include <stdlib.h> -#include <unistd.h> - struct connect_limit *connect_limit; static void client_connected(const struct master_service_connection *conn) @@ -22,13 +19,9 @@ int main(int argc, char *argv[]) { - int c; - - master_service = master_service_init("anvil", 0, argc, argv); - while ((c = getopt(argc, argv, master_service_getopt_string())) > 0) { - if (!master_service_parse_option(master_service, c, optarg)) - exit(FATAL_DEFAULT); - } + master_service = master_service_init("anvil", 0, argc, argv, NULL); + if (master_getopt(master_service) > 0) + return FATAL_DEFAULT; master_service_set_die_with_master(master_service, TRUE); master_service_init_log(master_service, "anvil: ");
--- a/src/auth/main.c Tue Oct 20 19:44:57 2009 -0400 +++ b/src/auth/main.c Tue Oct 20 20:07:45 2009 -0400 @@ -21,10 +21,6 @@ #include "auth-master-connection.h" #include "auth-client-connection.h" -#include <stdlib.h> -#include <unistd.h> -#include <sys/un.h> - enum auth_socket_type { AUTH_SOCKET_UNKNOWN = 0, AUTH_SOCKET_CLIENT, @@ -161,23 +157,18 @@ int main(int argc, char *argv[]) { - const char *getopt_str; int c; - master_service = master_service_init("auth", 0, argc, argv); + master_service = master_service_init("auth", 0, argc, argv, "w"); master_service_init_log(master_service, "auth: "); - getopt_str = t_strconcat("w", master_service_getopt_string(), NULL); - while ((c = getopt(argc, argv, getopt_str)) > 0) { + while ((c = master_getopt(master_service)) > 0) { switch (c) { case 'w': worker = TRUE; break; default: - if (!master_service_parse_option(master_service, - c, optarg)) - exit(FATAL_DEFAULT); - break; + return FATAL_DEFAULT; } }
--- a/src/config/doveconf.c Tue Oct 20 19:44:57 2009 -0400 +++ b/src/config/doveconf.c Tue Oct 20 20:07:45 2009 -0400 @@ -13,7 +13,6 @@ #include "config-request.h" #include <stdio.h> -#include <stdlib.h> #include <unistd.h> struct config_request_get_string_ctx { @@ -225,7 +224,7 @@ int main(int argc, char *argv[]) { enum config_dump_scope scope = CONFIG_DUMP_SCOPE_ALL; - const char *getopt_str, *config_path, *module = ""; + const char *config_path, *module = ""; struct config_filter filter; const char *error; char **exec_args = NULL; @@ -234,11 +233,9 @@ memset(&filter, 0, sizeof(filter)); master_service = master_service_init("config", MASTER_SERVICE_FLAG_STANDALONE, - argc, argv); + argc, argv, "af:m:nNe"); i_set_failure_prefix("doveconf: "); - getopt_str = t_strconcat("af:m:nNe", - master_service_getopt_string(), NULL); - while ((c = getopt(argc, argv, getopt_str)) > 0) { + while ((c = master_getopt(master_service)) > 0) { if (c == 'e') break; switch (c) { @@ -257,9 +254,7 @@ scope = CONFIG_DUMP_SCOPE_SET; break; default: - if (!master_service_parse_option(master_service, - c, optarg)) - exit(FATAL_DEFAULT); + return FATAL_DEFAULT; } } config_path = master_service_get_config_path(master_service);
--- a/src/config/main.c Tue Oct 20 19:44:57 2009 -0400 +++ b/src/config/main.c Tue Oct 20 20:07:45 2009 -0400 @@ -8,9 +8,6 @@ #include "config-parser.h" #include "config-request.h" -#include <stdlib.h> -#include <unistd.h> - static void client_connected(const struct master_service_connection *conn) { config_connection_create(conn->fd); @@ -19,13 +16,10 @@ int main(int argc, char *argv[]) { const char *path, *error; - int c; - master_service = master_service_init("config", 0, argc, argv); - while ((c = getopt(argc, argv, master_service_getopt_string())) > 0) { - if (!master_service_parse_option(master_service, c, optarg)) - exit(FATAL_DEFAULT); - } + master_service = master_service_init("config", 0, argc, argv, NULL); + if (master_getopt(master_service) > 0) + return FATAL_DEFAULT; master_service_init_log(master_service, "config: "); master_service_init_finish(master_service);
--- a/src/dict/main.c Tue Oct 20 19:44:57 2009 -0400 +++ b/src/dict/main.c Tue Oct 20 20:07:45 2009 -0400 @@ -13,9 +13,6 @@ #include "dict-connection.h" #include "dict-settings.h" -#include <stdlib.h> -#include <unistd.h> - static struct module *modules; static void client_connected(const struct master_service_connection *conn) @@ -77,13 +74,10 @@ NULL }; const char *error; - int c; - master_service = master_service_init("dict", 0, argc, argv); - while ((c = getopt(argc, argv, master_service_getopt_string())) > 0) { - if (!master_service_parse_option(master_service, c, optarg)) - exit(FATAL_DEFAULT); - } + master_service = master_service_init("dict", 0, argc, argv, NULL); + if (master_getopt(master_service) > 0) + return FATAL_DEFAULT; if (master_service_settings_read_simple(master_service, set_roots, &error) < 0)
--- a/src/doveadm/doveadm.c Tue Oct 20 19:44:57 2009 -0400 +++ b/src/doveadm/doveadm.c Tue Oct 20 20:07:45 2009 -0400 @@ -70,12 +70,11 @@ int main(int argc, char *argv[]) { - const char *cmd_name, *getopt_str; - int c; + const char *cmd_name; master_service = master_service_init("doveadm", MASTER_SERVICE_FLAG_STANDALONE, - argc, argv); + argc, argv, "+"); i_array_init(&doveadm_cmds, 32); doveadm_mail_init(); doveadm_register_cmd(&doveadm_cmd_help); @@ -86,11 +85,8 @@ /* "+" is GNU extension to stop at the first non-option. others just accept -+ option. */ - getopt_str = t_strconcat("+", master_service_getopt_string(), NULL); - while ((c = getopt(argc, argv, getopt_str)) > 0) { - if (!master_service_parse_option(master_service, c, optarg)) - usage(); - } + if (master_getopt(master_service) > 0) + usage(); if (optind == argc) usage();
--- a/src/dsync/dsync.c Tue Oct 20 19:44:57 2009 -0400 +++ b/src/dsync/dsync.c Tue Oct 20 20:07:45 2009 -0400 @@ -72,19 +72,17 @@ struct mail_storage_service_input input; struct mail_user *mail_user; struct dsync_worker *worker1, *worker2; - const char *getopt_str, *username, *mailbox = NULL, *cmd = NULL; + const char *username, *mailbox = NULL, *cmd = NULL; bool dest = TRUE; int c, ret, fd_in = STDIN_FILENO, fd_out = STDOUT_FILENO; master_service = master_service_init("dsync", MASTER_SERVICE_FLAG_STANDALONE | MASTER_SERVICE_FLAG_STD_CLIENT, - argc, argv); + argc, argv, "b:e:fu:v"); username = getenv("USER"); - getopt_str = t_strconcat("b:e:fu:v", - master_service_getopt_string(), NULL); - while ((c = getopt(argc, argv, getopt_str)) > 0) { + while ((c = master_getopt(master_service)) > 0) { if (c == '-') break; switch (c) { @@ -105,9 +103,7 @@ brain_flags |= DSYNC_BRAIN_FLAG_VERBOSE; break; default: - if (!master_service_parse_option(master_service, - c, optarg)) - usage(); + usage(); } } if (optind != argc)
--- a/src/imap/main.c Tue Oct 20 19:44:57 2009 -0400 +++ b/src/imap/main.c Tue Oct 20 20:07:45 2009 -0400 @@ -201,7 +201,6 @@ int main(int argc, char *argv[], char *envp[]) { enum master_service_flags service_flags = 0; - int c; if (IS_STANDALONE() && getuid() == 0 && net_getpeername(1, NULL, NULL) == 0) { @@ -218,11 +217,10 @@ MAIL_STORAGE_SERVICE_FLAG_DISALLOW_ROOT; } - master_service = master_service_init("imap", service_flags, argc, argv); - while ((c = getopt(argc, argv, master_service_getopt_string())) > 0) { - if (!master_service_parse_option(master_service, c, optarg)) - exit(FATAL_DEFAULT); - } + master_service = master_service_init("imap", service_flags, + argc, argv, NULL); + if (master_getopt(master_service) > 0) + exit(FATAL_DEFAULT); process_title_init(argv, envp); master_service_init_finish(master_service);
--- a/src/lda/main.c Tue Oct 20 19:44:57 2009 -0400 +++ b/src/lda/main.c Tue Oct 20 20:07:45 2009 -0400 @@ -244,7 +244,7 @@ }; struct mail_deliver_context ctx; enum mail_storage_service_flags service_flags = 0; - const char *user, *errstr, *path, *getopt_str; + const char *user, *errstr, *path; struct mail_storage_service_input service_input; struct mail_user *raw_mail_user; struct mail_namespace *raw_ns; @@ -287,7 +287,7 @@ master_service = master_service_init("lda", MASTER_SERVICE_FLAG_STANDALONE | MASTER_SERVICE_FLAG_DONT_LOG_TO_STDERR, - argc, argv); + argc, argv, "a:d:p:ekm:nsf:"); memset(&ctx, 0, sizeof(ctx)); ctx.pool = pool_alloconly_create("mail deliver context", 256); @@ -295,9 +295,7 @@ path = NULL; user = getenv("USER"); - getopt_str = t_strconcat("a:d:p:ekm:nsf:", - master_service_getopt_string(), NULL); - while ((c = getopt(argc, argv, getopt_str)) > 0) { + while ((c = master_getopt(master_service)) > 0) { switch (c) { case 'a': /* destination address */ @@ -341,12 +339,8 @@ p_strdup(ctx.pool, address_sanitize(optarg)); break; default: - if (!master_service_parse_option(master_service, - c, optarg)) { - print_help(); - exit(EX_USAGE); - } - break; + print_help(); + return EX_USAGE; } } if (optind != argc) {
--- a/src/lib-master/master-service-private.h Tue Oct 20 19:44:57 2009 -0400 +++ b/src/lib-master/master-service-private.h Tue Oct 20 20:07:45 2009 -0400 @@ -15,7 +15,8 @@ struct ioloop *ioloop; char *name; - enum master_service_flags flags; + char *getopt_str; + enum master_service_flags flags; int argc; char **argv;
--- a/src/lib-master/master-service.c Tue Oct 20 19:44:57 2009 -0400 +++ b/src/lib-master/master-service.c Tue Oct 20 20:07:45 2009 -0400 @@ -78,7 +78,7 @@ struct master_service * master_service_init(const char *name, enum master_service_flags flags, - int argc, char *argv[]) + int argc, char *argv[], const char *getopt_str) { struct master_service *service; const char *str; @@ -110,6 +110,8 @@ service->argc = argc; service->argv = argv; service->name = i_strdup(name); + service->getopt_str = + i_strconcat(master_service_getopt_string(), getopt_str, NULL); service->flags = flags; service->ioloop = io_loop_create(); service->service_count_left = (unsigned int)-1; @@ -147,6 +149,18 @@ return service; } +int master_getopt(struct master_service *service) +{ + int c; + + while ((c = getopt(service->argc, service->argv, + service->getopt_str)) > 0) { + if (!master_service_parse_option(service, c, optarg)) + break; + } + return c; +} + void master_service_init_log(struct master_service *service, const char *prefix) { @@ -569,6 +583,7 @@ io_loop_destroy(&service->ioloop); i_free(service->listeners); + i_free(service->getopt_str); i_free(service->name); i_free(service);
--- a/src/lib-master/master-service.h Tue Oct 20 19:44:57 2009 -0400 +++ b/src/lib-master/master-service.h Tue Oct 20 20:07:45 2009 -0400 @@ -43,7 +43,10 @@ /* Start service initialization. */ struct master_service * master_service_init(const char *name, enum master_service_flags flags, - int argc, char *argv[]); + int argc, char *argv[], const char *getopt_str); +/* Call getopt() and handle internal parameters. Return values are the same as + getopt()'s. */ +int master_getopt(struct master_service *service); /* Parser command line option. Returns TRUE if processed. */ bool master_service_parse_option(struct master_service *service, int opt, const char *arg);
--- a/src/lmtp/main.c Tue Oct 20 19:44:57 2009 -0400 +++ b/src/lmtp/main.c Tue Oct 20 20:07:45 2009 -0400 @@ -63,18 +63,16 @@ enum mail_storage_service_flags storage_service_flags = MAIL_STORAGE_SERVICE_FLAG_DISALLOW_ROOT | MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP; - int c; if (IS_STANDALONE()) { service_flags |= MASTER_SERVICE_FLAG_STANDALONE | MASTER_SERVICE_FLAG_STD_CLIENT; } - master_service = master_service_init("lmtp", service_flags, argc, argv); - while ((c = getopt(argc, argv, master_service_getopt_string())) > 0) { - if (!master_service_parse_option(master_service, c, optarg)) - exit(FATAL_DEFAULT); - } + master_service = master_service_init("lmtp", service_flags, + argc, argv, NULL); + if (master_getopt(master_service) > 0) + return FATAL_DEFAULT; multi_service = mail_storage_service_multi_init(master_service, set_roots,
--- a/src/log/main.c Tue Oct 20 19:44:57 2009 -0400 +++ b/src/log/main.c Tue Oct 20 20:07:45 2009 -0400 @@ -7,7 +7,6 @@ #include "master-service-settings.h" #include "log-connection.h" -#include <stdlib.h> #include <unistd.h> pid_t master_pid; @@ -39,18 +38,15 @@ int main(int argc, char *argv[]) { const char *error; - int c; - master_service = master_service_init("log", 0, argc, argv); + master_service = master_service_init("log", 0, argc, argv, NULL); /* use log prefix and log to stderr until we've configured the real logging */ i_set_failure_file("/dev/stderr", "log: "); - while ((c = getopt(argc, argv, master_service_getopt_string())) > 0) { - if (!master_service_parse_option(master_service, c, optarg)) - exit(FATAL_DEFAULT); - } + if (master_getopt(master_service) > 0) + return FATAL_DEFAULT; if (master_service_settings_read_simple(master_service, NULL, &error) < 0)
--- a/src/login-common/main.c Tue Oct 20 19:44:57 2009 -0400 +++ b/src/login-common/main.c Tue Oct 20 20:07:45 2009 -0400 @@ -171,18 +171,16 @@ enum master_service_flags service_flags = MASTER_SERVICE_FLAG_KEEP_CONFIG_OPEN | MASTER_SERVICE_FLAG_TRACK_LOGIN_STATE; - const char *getopt_str; pool_t set_pool; bool allow_core_dumps = FALSE; int c; master_service = master_service_init(login_process_name, service_flags, - argc, argv); + argc, argv, "DS"); master_service_init_log(master_service, t_strconcat( login_process_name, ": ", NULL)); - getopt_str = t_strconcat("DS", master_service_getopt_string(), NULL); - while ((c = getopt(argc, argv, getopt_str)) > 0) { + while ((c = master_getopt(master_service)) > 0) { switch (c) { case 'D': allow_core_dumps = TRUE; @@ -191,10 +189,7 @@ ssl_connections = TRUE; break; default: - if (!master_service_parse_option(master_service, - c, optarg)) - exit(FATAL_DEFAULT); - break; + return FATAL_DEFAULT; } }
--- a/src/master/main.c Tue Oct 20 19:44:57 2009 -0400 +++ b/src/master/main.c Tue Oct 20 20:07:45 2009 -0400 @@ -591,7 +591,7 @@ { struct master_settings *set; unsigned int child_process_env_idx = 0; - const char *getopt_str, *error, *env_tz, *doveconf_arg = NULL; + const char *error, *env_tz, *doveconf_arg = NULL; failure_callback_t *orig_info_callback, *orig_debug_callback; void **sets; bool foreground = FALSE, ask_key_pass = FALSE, log_error = FALSE; @@ -606,7 +606,7 @@ master_service = master_service_init(MASTER_SERVICE_NAME, MASTER_SERVICE_FLAG_STANDALONE | MASTER_SERVICE_FLAG_DONT_LOG_TO_STDERR, - argc, argv); + argc, argv, "Fanp-"); i_set_failure_prefix(""); io_loop_set_time_moved_callback(current_ioloop, master_time_moved); @@ -614,8 +614,7 @@ master_uid = geteuid(); master_gid = getegid(); - getopt_str = t_strconcat("Fanp-", master_service_getopt_string(), NULL); - while ((c = getopt(argc, argv, getopt_str)) > 0) { + while ((c = master_getopt(master_service)) > 0) { if (c == '-') break; switch (c) {
--- a/src/plugins/convert/convert-tool.c Tue Oct 20 19:44:57 2009 -0400 +++ b/src/plugins/convert/convert-tool.c Tue Oct 20 20:07:45 2009 -0400 @@ -23,16 +23,14 @@ struct mail_namespace *dest_ns; struct mail_namespace_settings ns_set; const char *error; - int i, c, ret = 0; + int i, ret = 0; master_service = master_service_init("convert-tool", MASTER_SERVICE_FLAG_STANDALONE, - argc, argv); + argc, argv, NULL); - while ((c = getopt(argc, argv, master_service_getopt_string())) > 0) { - if (!master_service_parse_option(master_service, c, optarg)) - i_fatal(USAGE_STRING); - } + if (master_getopt(master_service) > 0) + i_fatal(USAGE_STRING); if (argc - optind < 4) i_fatal(USAGE_STRING);
--- a/src/plugins/expire/expire-tool.c Tue Oct 20 19:44:57 2009 -0400 +++ b/src/plugins/expire/expire-tool.c Tue Oct 20 20:07:45 2009 -0400 @@ -312,25 +312,20 @@ int main(int argc, char *argv[]) { - const char *getopt_str; bool test = FALSE; int c; master_service = master_service_init("expire-tool", MASTER_SERVICE_FLAG_STANDALONE, - argc, argv); + argc, argv, "t"); - getopt_str = t_strconcat("t", master_service_getopt_string(), NULL); - while ((c = getopt(argc, argv, getopt_str)) > 0) { + while ((c = master_getopt(master_service)) > 0) { switch (c) { case 't': test = TRUE; break; default: - if (!master_service_parse_option(master_service, - c, optarg)) - i_fatal("Unknown parameter: -%c", c); - break; + return FATAL_DEFAULT; } } if (optind != argc)
--- a/src/pop3/main.c Tue Oct 20 19:44:57 2009 -0400 +++ b/src/pop3/main.c Tue Oct 20 20:07:45 2009 -0400 @@ -164,7 +164,6 @@ int main(int argc, char *argv[], char *envp[]) { enum master_service_flags service_flags = 0; - int c; if (IS_STANDALONE() && getuid() == 0 && net_getpeername(1, NULL, NULL) == 0) { @@ -181,11 +180,10 @@ MAIL_STORAGE_SERVICE_FLAG_DISALLOW_ROOT; } - master_service = master_service_init("pop3", service_flags, argc, argv); - while ((c = getopt(argc, argv, master_service_getopt_string())) > 0) { - if (!master_service_parse_option(master_service, c, optarg)) - exit(FATAL_DEFAULT); - } + master_service = master_service_init("pop3", service_flags, + argc, argv, NULL); + if (master_getopt(master_service) > 0) + return FATAL_DEFAULT; process_title_init(argv, envp); master_service_init_finish(master_service);
--- a/src/ssl-params/main.c Tue Oct 20 19:44:57 2009 -0400 +++ b/src/ssl-params/main.c Tue Oct 20 20:07:45 2009 -0400 @@ -8,8 +8,6 @@ #include "ssl-params-settings.h" #include "ssl-params.h" -#include <stdlib.h> -#include <unistd.h> #include <sys/wait.h> #define SSL_BUILD_PARAM_FNAME "ssl-parameters.dat" @@ -117,15 +115,12 @@ int main(int argc, char *argv[]) { const struct ssl_params_settings *set; - int c; - master_service = master_service_init("ssl-params", 0, argc, argv); + master_service = master_service_init("ssl-params", 0, argc, argv, NULL); master_service_init_log(master_service, "ssl-params: "); - while ((c = getopt(argc, argv, master_service_getopt_string())) > 0) { - if (!master_service_parse_option(master_service, c, optarg)) - exit(FATAL_DEFAULT); - } + if (master_getopt(master_service) > 0) + return FATAL_DEFAULT; set = ssl_params_settings_read(master_service); master_service_init_finish(master_service);