Mercurial > dovecot > core-2.2
changeset 19897:548734abdb21
doveadm-dict: Remove i_fatal() usage
author | Aki Tuomi <aki.tuomi@dovecot.fi> |
---|---|
date | Mon, 29 Feb 2016 17:13:32 +0200 |
parents | 68a9266211e6 |
children | 130ebf573dde |
files | src/doveadm/doveadm-dict.c |
diffstat | 1 files changed, 45 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/src/doveadm/doveadm-dict.c Mon Feb 29 16:46:02 2016 +0200 +++ b/src/doveadm/doveadm-dict.c Mon Feb 29 17:13:32 2016 +0200 @@ -10,13 +10,14 @@ static void dict_cmd_help(doveadm_command_t *cmd); -static struct dict * +static int cmd_dict_init_full(int *argc, char **argv[], int own_arg_count, int key_arg_idx, - doveadm_command_t *cmd, enum dict_iterate_flags *iter_flags) + doveadm_command_t *cmd, enum dict_iterate_flags *iter_flags, + struct dict **dict_r) { const char *getopt_args = iter_flags == NULL ? "u:" : "1Ru:V"; struct dict *dict; - const char *error, *username = ""; + const char *dict_uri, *error, *username = ""; int c; while ((c = getopt(*argc, *argv, getopt_args)) > 0) { @@ -46,11 +47,7 @@ if (*argc != 1 + own_arg_count) dict_cmd_help(cmd); - dict_drivers_register_builtin(); - if (dict_init((*argv)[0], DICT_DATA_TYPE_STRING, username, - doveadm_settings->base_dir, &dict, &error) < 0) - i_fatal("dict_init(%s) failed: %s", (*argv)[0], error); - + dict_uri = (*argv)[0]; *argc += 1; *argv += 1; @@ -59,23 +56,37 @@ if (strncmp(key, DICT_PATH_PRIVATE, strlen(DICT_PATH_PRIVATE)) != 0 && strncmp(key, DICT_PATH_SHARED, strlen(DICT_PATH_SHARED)) != 0) { - i_fatal("Key must begin with '"DICT_PATH_PRIVATE + i_error("Key must begin with '"DICT_PATH_PRIVATE "' or '"DICT_PATH_SHARED"': %s", key); + doveadm_exit_code = EX_USAGE; + return -1; } if (username[0] == '\0' && - strncmp(key, DICT_PATH_PRIVATE, strlen(DICT_PATH_PRIVATE)) == 0) - i_fatal("-u must be specified for "DICT_PATH_PRIVATE" keys"); + strncmp(key, DICT_PATH_PRIVATE, strlen(DICT_PATH_PRIVATE)) == 0) { + i_error("-u must be specified for "DICT_PATH_PRIVATE" keys"); + doveadm_exit_code = EX_USAGE; + return -1; + } } - return dict; + + dict_drivers_register_builtin(); + if (dict_init(dict_uri, DICT_DATA_TYPE_STRING, username, + doveadm_settings->base_dir, &dict, &error) < 0) { + i_error("dict_init(%s) failed: %s", dict_uri, error); + doveadm_exit_code = EX_TEMPFAIL; + return -1; + } + *dict_r = dict; + return 0; } -static struct dict * +static int cmd_dict_init(int *argc, char **argv[], int own_arg_count, int key_arg_idx, - doveadm_command_t *cmd) + doveadm_command_t *cmd, struct dict **dict_r) { return cmd_dict_init_full(argc, argv, own_arg_count, - key_arg_idx, cmd, NULL); + key_arg_idx, cmd, NULL, dict_r); } static void cmd_dict_get(int argc, char *argv[]) @@ -84,7 +95,8 @@ const char *value; int ret; - dict = cmd_dict_init(&argc, &argv, 1, 0, cmd_dict_get); + if (cmd_dict_init(&argc, &argv, 1, 0, cmd_dict_get, &dict) < 0) + return; doveadm_print_init(DOVEADM_PRINT_TYPE_TABLE); doveadm_print_header("value", "", DOVEADM_PRINT_HEADER_FLAG_HIDE_TITLE); @@ -107,7 +119,9 @@ struct dict *dict; struct dict_transaction_context *trans; - dict = cmd_dict_init(&argc, &argv, 2, 0, cmd_dict_set); + if (cmd_dict_init(&argc, &argv, 2, 0, cmd_dict_set, &dict) < 0) + return; + trans = dict_transaction_begin(dict); dict_set(trans, argv[0], argv[1]); if (dict_transaction_commit(&trans) <= 0) { @@ -122,7 +136,9 @@ struct dict *dict; struct dict_transaction_context *trans; - dict = cmd_dict_init(&argc, &argv, 1, 0, cmd_dict_unset); + if (cmd_dict_init(&argc, &argv, 1, 0, cmd_dict_unset, &dict) < 0) + return; + trans = dict_transaction_begin(dict); dict_unset(trans, argv[0]); if (dict_transaction_commit(&trans) <= 0) { @@ -139,9 +155,15 @@ long long diff; int ret; - dict = cmd_dict_init(&argc, &argv, 2, 0, cmd_dict_inc); - if (str_to_llong(argv[1], &diff) < 0) - i_fatal("Invalid diff: %s", argv[1]); + if (cmd_dict_init(&argc, &argv, 2, 0, cmd_dict_inc, &dict) < 0) + return; + + if (str_to_llong(argv[1], &diff) < 0) { + i_error("Invalid diff: %s", argv[1]); + doveadm_exit_code = EX_USAGE; + dict_deinit(&dict); + return; + } trans = dict_transaction_begin(dict); dict_atomic_inc(trans, argv[0], diff); @@ -163,7 +185,8 @@ enum dict_iterate_flags iter_flags = 0; const char *key, *value; - dict = cmd_dict_init_full(&argc, &argv, 1, 0, cmd_dict_iter, &iter_flags); + if (cmd_dict_init_full(&argc, &argv, 1, 0, cmd_dict_iter, &iter_flags, &dict) < 0) + return; doveadm_print_init(DOVEADM_PRINT_TYPE_TAB); doveadm_print_header_simple("key");