Mercurial > dovecot > core-2.2
changeset 15067:9bff478f81fd
dict_init() API changed to return int.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 16 Sep 2012 00:52:39 +0300 |
parents | d419aac7ab31 |
children | 002e0a120c2a |
files | src/auth/db-dict.c src/dict/dict-connection.c src/lib-dict/dict-client.c src/lib-dict/dict-db.c src/lib-dict/dict-file.c src/lib-dict/dict-memcached-ascii.c src/lib-dict/dict-memcached.c src/lib-dict/dict-private.h src/lib-dict/dict-redis.c src/lib-dict/dict-sql.c src/lib-dict/dict.c src/lib-dict/dict.h src/lib-imap-urlauth/imap-urlauth-backend.c src/plugins/acl/acl-lookup-dict.c src/plugins/expire/doveadm-expire.c src/plugins/expire/expire-plugin.c src/plugins/quota/quota-dict.c |
diffstat | 17 files changed, 69 insertions(+), 59 deletions(-) [+] |
line wrap: on
line diff
--- a/src/auth/db-dict.c Sat Sep 15 23:57:08 2012 +0300 +++ b/src/auth/db-dict.c Sun Sep 16 00:52:39 2012 +0300 @@ -90,8 +90,9 @@ i_fatal("dict %s: Unsupported value_format %s in ", config_path, conn->set.value_format); } - conn->dict = dict_init(conn->set.uri, DICT_DATA_TYPE_STRING, "", - global_auth_settings->base_dir); + if (dict_init(conn->set.uri, DICT_DATA_TYPE_STRING, "", + global_auth_settings->base_dir, &conn->dict) < 0) + i_fatal("dict %s: Failed to init dict", config_path); conn->next = connections; connections = conn;
--- a/src/dict/dict-connection.c Sat Sep 15 23:57:08 2012 +0300 +++ b/src/dict/dict-connection.c Sun Sep 16 00:52:39 2012 +0300 @@ -83,9 +83,8 @@ } uri = strlist[i+1]; - conn->dict = dict_init(uri, conn->value_type, conn->username, - dict_settings->base_dir); - if (conn->dict == NULL) { + if (dict_init(uri, conn->value_type, conn->username, + dict_settings->base_dir, &conn->dict) < 0) { /* dictionary initialization failed */ i_error("Failed to initialize dictionary '%s'", conn->name); return -1;
--- a/src/lib-dict/dict-client.c Sat Sep 15 23:57:08 2012 +0300 +++ b/src/lib-dict/dict-client.c Sun Sep 16 00:52:39 2012 +0300 @@ -463,10 +463,10 @@ } } -static struct dict * +static int client_dict_init(struct dict *driver, const char *uri, enum dict_data_type value_type, const char *username, - const char *base_dir) + const char *base_dir, struct dict **dict_r) { struct client_dict *dict; const char *dest_uri; @@ -476,7 +476,7 @@ dest_uri = strchr(uri, ':'); if (dest_uri == NULL) { i_error("dict-client: Invalid URI: %s", uri); - return NULL; + return -1; } pool = pool_alloconly_create("client dict", 1024); @@ -496,7 +496,8 @@ "/"DEFAULT_DICT_SERVER_SOCKET_FNAME, NULL); } dict->uri = p_strdup(pool, dest_uri + 1); - return &dict->dict; + *dict_r = &dict->dict; + return -1; } static void client_dict_deinit(struct dict *_dict)
--- a/src/lib-dict/dict-db.c Sat Sep 15 23:57:08 2012 +0300 +++ b/src/lib-dict/dict-db.c Sun Sep 16 00:52:39 2012 +0300 @@ -140,10 +140,11 @@ return 0; } -static struct dict * +static int db_dict_init(struct dict *driver, const char *uri, enum dict_data_type value_type, - const char *username, const char *base_dir ATTR_UNUSED) + const char *username, const char *base_dir ATTR_UNUSED, + struct dict **dict_r) { struct db_dict *dict; pool_t pool; @@ -156,7 +157,7 @@ "run-time linked against %d.%d.%d library", DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH, major, minor, patch); - return NULL; + return -1; } pool = pool_alloconly_create("db dict", 1024); @@ -170,15 +171,16 @@ if (ret != 0) { i_error("db_env_create() failed: %s\n", db_strerror(ret)); pool_unref(&pool); - return NULL; + return -1; } if (db_dict_open(dict, uri, username) < 0) { i_error("db(%s) open failed", uri); db_dict_deinit(&dict->dict); - return NULL; + return -1; } - return &dict->dict; + *dict_r = &dict->dict; + return 0; } static void db_dict_deinit(struct dict *_dict)
--- a/src/lib-dict/dict-file.c Sat Sep 15 23:57:08 2012 +0300 +++ b/src/lib-dict/dict-file.c Sun Sep 16 00:52:39 2012 +0300 @@ -51,10 +51,11 @@ .use_io_notify = TRUE }; -static struct dict *file_dict_init(struct dict *driver, const char *uri, - enum dict_data_type value_type ATTR_UNUSED, - const char *username ATTR_UNUSED, - const char *base_dir ATTR_UNUSED) +static int +file_dict_init(struct dict *driver, const char *uri, + enum dict_data_type value_type ATTR_UNUSED, + const char *username ATTR_UNUSED, + const char *base_dir ATTR_UNUSED, struct dict **dict_r) { struct file_dict *dict; const char *p; @@ -79,7 +80,8 @@ dict->hash_pool = pool_alloconly_create("file dict", 1024); hash_table_create(&dict->hash, dict->hash_pool, 0, str_hash, strcmp); dict->fd = -1; - return &dict->dict; + *dict_r = &dict->dict; + return -1; } static void file_dict_deinit(struct dict *_dict)
--- a/src/lib-dict/dict-memcached-ascii.c Sat Sep 15 23:57:08 2012 +0300 +++ b/src/lib-dict/dict-memcached-ascii.c Sun Sep 16 00:52:39 2012 +0300 @@ -330,11 +330,12 @@ return str_c(str); } -static struct dict * +static int memcached_ascii_dict_init(struct dict *driver, const char *uri, enum dict_data_type value_type ATTR_UNUSED, const char *username, - const char *base_dir ATTR_UNUSED) + const char *base_dir ATTR_UNUSED, + struct dict **dict_r) { struct memcached_ascii_dict *dict; const char *const *args; @@ -388,7 +389,8 @@ dict->ioloop = io_loop_create(); current_ioloop = old_ioloop; - return &dict->dict; + *dict_r = &dict->dict; + return 0; } static void memcached_ascii_dict_deinit(struct dict *_dict)
--- a/src/lib-dict/dict-memcached.c Sat Sep 15 23:57:08 2012 +0300 +++ b/src/lib-dict/dict-memcached.c Sun Sep 16 00:52:39 2012 +0300 @@ -167,11 +167,11 @@ .client_connected = memcached_conn_connected }; -static struct dict * +static int memcached_dict_init(struct dict *driver, const char *uri, enum dict_data_type value_type ATTR_UNUSED, const char *username ATTR_UNUSED, - const char *base_dir ATTR_UNUSED) + const char *base_dir ATTR_UNUSED, struct dict **dict_r) { struct memcached_dict *dict; const char *const *args; @@ -213,7 +213,8 @@ dict->dict = *driver; dict->conn.cmd = buffer_create_dynamic(default_pool, 256); dict->conn.dict = dict; - return &dict->dict; + *dict_r = &dict->dict; + return 0; } static void memcached_dict_deinit(struct dict *_dict)
--- a/src/lib-dict/dict-private.h Sat Sep 15 23:57:08 2012 +0300 +++ b/src/lib-dict/dict-private.h Sun Sep 16 00:52:39 2012 +0300 @@ -4,9 +4,10 @@ #include "dict.h" struct dict_vfuncs { - struct dict *(*init)(struct dict *dict_driver, const char *uri, - enum dict_data_type value_type, - const char *username, const char *base_dir); + int (*init)(struct dict *dict_driver, const char *uri, + enum dict_data_type value_type, + const char *username, const char *base_dir, + struct dict **dict_r); void (*deinit)(struct dict *dict); int (*wait)(struct dict *dict);
--- a/src/lib-dict/dict-redis.c Sat Sep 15 23:57:08 2012 +0300 +++ b/src/lib-dict/dict-redis.c Sun Sep 16 00:52:39 2012 +0300 @@ -298,11 +298,11 @@ return str_c(str); } -static struct dict * +static int redis_dict_init(struct dict *driver, const char *uri, enum dict_data_type value_type ATTR_UNUSED, const char *username, - const char *base_dir ATTR_UNUSED) + const char *base_dir ATTR_UNUSED, struct dict **dict_r) { struct redis_dict *dict; const char *const *args; @@ -352,7 +352,8 @@ dict->dict = *driver; dict->conn.last_reply = str_new(default_pool, 256); dict->conn.dict = dict; - return &dict->dict; + *dict_r = &dict->dict; + return -1; } static void redis_dict_deinit(struct dict *_dict)
--- a/src/lib-dict/dict-sql.c Sat Sep 15 23:57:08 2012 +0300 +++ b/src/lib-dict/dict-sql.c Sun Sep 16 00:52:39 2012 +0300 @@ -71,10 +71,11 @@ static void sql_dict_prev_inc_flush(struct sql_dict_transaction_context *ctx); -static struct dict * +static int sql_dict_init(struct dict *driver, const char *uri, enum dict_data_type value_type ATTR_UNUSED, - const char *username, const char *base_dir ATTR_UNUSED) + const char *username, const char *base_dir ATTR_UNUSED, + struct dict **dict_r) { struct sql_dict *dict; pool_t pool; @@ -87,7 +88,7 @@ dict->set = dict_sql_settings_read(pool, uri); if (dict->set == NULL) { pool_unref(&pool); - return NULL; + return -1; } /* currently pgsql and sqlite don't support "ON DUPLICATE KEY" */ @@ -95,7 +96,8 @@ dict->db = sql_db_cache_new(dict_sql_db_cache, driver->name, dict->set->connect); - return &dict->dict; + *dict_r = &dict->dict; + return 0; } static void sql_dict_deinit(struct dict *_dict)
--- a/src/lib-dict/dict.c Sat Sep 15 23:57:08 2012 +0300 +++ b/src/lib-dict/dict.c Sun Sep 16 00:52:39 2012 +0300 @@ -70,8 +70,8 @@ dict_driver_unregister(&dict_driver_redis); } -struct dict *dict_init(const char *uri, enum dict_data_type value_type, - const char *username, const char *base_dir) +int dict_init(const char *uri, enum dict_data_type value_type, + const char *username, const char *base_dir, struct dict **dict_r) { struct dict *dict; const char *p, *name; @@ -81,7 +81,7 @@ p = strchr(uri, ':'); if (p == NULL) { i_error("Dictionary URI is missing ':': %s", uri); - return NULL; + return -1; } T_BEGIN { @@ -91,8 +91,9 @@ i_error("Unknown dict module: %s", name); } T_END; - return dict == NULL ? NULL : - dict->v.init(dict, p+1, value_type, username, base_dir); + if (dict == NULL) + return -1; + return dict->v.init(dict, p+1, value_type, username, base_dir, dict_r); } void dict_deinit(struct dict **_dict)
--- a/src/lib-dict/dict.h Sat Sep 15 23:57:08 2012 +0300 +++ b/src/lib-dict/dict.h Sun Sep 16 00:52:39 2012 +0300 @@ -29,9 +29,9 @@ void dict_drivers_unregister_all(void); /* Open dictionary with given URI (type:data). - If URI is invalid, returns NULL. */ -struct dict *dict_init(const char *uri, enum dict_data_type value_type, - const char *username, const char *base_dir); + Returns 0 if ok, -1 if URI is invalid. */ +int dict_init(const char *uri, enum dict_data_type value_type, + const char *username, const char *base_dir, struct dict **dict_r); /* Close dictionary. */ void dict_deinit(struct dict **dict); /* Wait for all pending asynchronous transaction commits to finish.
--- a/src/lib-imap-urlauth/imap-urlauth-backend.c Sat Sep 15 23:57:08 2012 +0300 +++ b/src/lib-imap-urlauth/imap-urlauth-backend.c Sun Sep 16 00:52:39 2012 +0300 @@ -26,9 +26,8 @@ if (user->mail_debug) i_debug("imap-urlauth backend: opening backend dict URI %s", dict_uri); - dict = dict_init(dict_uri, DICT_DATA_TYPE_STRING, - user->username, user->set->base_dir); - if (dict == NULL) + if (dict_init(dict_uri, DICT_DATA_TYPE_STRING, + user->username, user->set->base_dir, &dict) < 0) return -1; backend = i_new(struct imap_urlauth_backend, 1);
--- a/src/plugins/acl/acl-lookup-dict.c Sat Sep 15 23:57:08 2012 +0300 +++ b/src/plugins/acl/acl-lookup-dict.c Sun Sep 16 00:52:39 2012 +0300 @@ -42,9 +42,8 @@ uri = mail_user_plugin_getenv(user, "acl_shared_dict"); if (uri != NULL) { - dict->dict = dict_init(uri, DICT_DATA_TYPE_STRING, "", - user->set->base_dir); - if (dict->dict == NULL) + if (dict_init(uri, DICT_DATA_TYPE_STRING, "", + user->set->base_dir, &dict->dict) < 0) i_error("acl: dict_init(%s) failed", uri); } else if (user->mail_debug) { i_debug("acl: No acl_shared_dict setting - "
--- a/src/plugins/expire/doveadm-expire.c Sat Sep 15 23:57:08 2012 +0300 +++ b/src/plugins/expire/doveadm-expire.c Sun Sep 16 00:52:39 2012 +0300 @@ -404,9 +404,8 @@ if (doveadm_debug) i_debug("expire: Searching only users listed in expire database"); - dict = dict_init(expire_dict, DICT_DATA_TYPE_UINT32, "", - doveadm_settings->base_dir); - if (dict == NULL) { + if (dict_init(expire_dict, DICT_DATA_TYPE_UINT32, "", + doveadm_settings->base_dir, &dict) < 0) { i_error("dict_init(%s) failed, not using it", expire_dict); return; }
--- a/src/plugins/expire/expire-plugin.c Sat Sep 15 23:57:08 2012 +0300 +++ b/src/plugins/expire/expire-plugin.c Sun Sep 16 00:52:39 2012 +0300 @@ -345,9 +345,8 @@ euser->set = expire_set_init(expire_get_patterns(user)); /* we're using only shared dictionary, the username doesn't matter. */ - euser->db = dict_init(dict_uri, DICT_DATA_TYPE_UINT32, "", - user->set->base_dir); - if (euser->db == NULL) + if (dict_init(dict_uri, DICT_DATA_TYPE_UINT32, "", + user->set->base_dir, &euser->db) < 0) i_error("expire plugin: dict_init(%s) failed", dict_uri); else MODULE_CONTEXT_SET(user, expire_mail_user_module, euser);
--- a/src/plugins/quota/quota-dict.c Sat Sep 15 23:57:08 2012 +0300 +++ b/src/plugins/quota/quota-dict.c Sun Sep 16 00:52:39 2012 +0300 @@ -77,9 +77,10 @@ /* FIXME: we should use 64bit integer as datatype instead but before it can actually be used don't bother */ - root->dict = dict_init(args, DICT_DATA_TYPE_STRING, username, - _root->quota->user->set->base_dir); - return root->dict != NULL ? 0 : -1; + if (dict_init(args, DICT_DATA_TYPE_STRING, username, + _root->quota->user->set->base_dir, &root->dict) < 0) + return -1; + return 0; } static void dict_quota_deinit(struct quota_root *_root)