#include "buffer.h"
#ifdef BUILD_CDB
+#include "settings.h"
+#include "settings-parser.h"
#include "dict-private.h"
#include <string.h>
char *error;
};
+struct dict_cdb_settings {
+ pool_t pool;
+
+ const char *cdb_path;
+};
+
+#undef DEF
+#define DEF(type, name) \
+ SETTING_DEFINE_STRUCT_##type(#name, name, struct dict_cdb_settings)
+static const struct setting_define cdb_setting_defines[] = {
+ DEF(STR, cdb_path),
+
+ SETTING_DEFINE_LIST_END
+};
+static const struct dict_cdb_settings cdb_default_settings = {
+ .cdb_path = "",
+};
+const struct setting_parser_info cdb_setting_parser_info = {
+ .name = "dict_cdb",
+
+ .defines = cdb_setting_defines,
+ .defaults = &cdb_default_settings,
+
+ .struct_size = sizeof(struct dict_cdb_settings),
+ .pool_offset1 = 1 + offsetof(struct dict_cdb_settings, pool),
+};
+
static void cdb_dict_deinit(struct dict *_dict);
static int
-cdb_dict_init_legacy(struct dict *driver, const char *uri,
- const struct dict_legacy_settings *set ATTR_UNUSED,
+cdb_dict_init_common(const struct dict *driver,
+ const struct dict_cdb_settings *set,
struct dict **dict_r, const char **error_r)
{
struct cdb_dict *dict;
dict = i_new(struct cdb_dict, 1);
dict->dict = *driver;
- dict->path = i_strdup(uri);
+ dict->path = i_strdup(set->cdb_path);
dict->flag = CDB_WITH_NULL | CDB_WITHOUT_NULL;
+ settings_free(set);
/* initialize cdb to 0 (unallocated) */
i_zero(&dict->cdb);
return 0;
}
+static int
+cdb_dict_init_legacy(struct dict *driver, const char *uri,
+ const struct dict_legacy_settings *legacy_set ATTR_UNUSED,
+ struct dict **dict_r, const char **error_r)
+{
+ pool_t pool = pool_alloconly_create("cdb_settings", 128);
+ struct dict_cdb_settings *set =
+ settings_defaults_dup(pool, &cdb_setting_parser_info);
+ set->cdb_path = p_strdup(pool, uri);
+ return cdb_dict_init_common(driver, set, dict_r, error_r);
+}
+
+static int
+cdb_dict_init(const struct dict *dict_driver, struct event *event,
+ struct dict **dict_r, const char **error_r)
+{
+ const struct dict_cdb_settings *set;
+
+ if (settings_get(event, &cdb_setting_parser_info, 0,
+ &set, error_r) < 0)
+ return -1;
+ return cdb_dict_init_common(dict_driver, set, dict_r, error_r);
+}
+
+
static void cdb_dict_deinit(struct dict *_dict)
{
struct cdb_dict *dict = (struct cdb_dict *)_dict;
struct dict dict_driver_cdb = {
.name = "cdb",
.v = {
+ .init = cdb_dict_init,
.init_legacy = cdb_dict_init_legacy,
.deinit = cdb_dict_deinit,
.lookup = cdb_dict_lookup,