From f5d345051217a4f54a53dac5a7397f5672e305ad Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Fri, 4 Sep 2009 15:23:15 +0200 Subject: [PATCH] Refactor service, settings --- src/database.c | 33 +++++++++------ src/database.h | 6 +-- src/http_command.c | 18 +++++--- src/logic.c | 31 +++++++------- src/pazpar2.c | 9 ++-- src/pazpar2.h | 3 +- src/pazpar2_config.c | 2 + src/pazpar2_config.h | 3 +- src/reclists.c | 4 +- src/reclists.h | 3 +- src/settings.c | 114 ++++++++++++++++++++++++++++---------------------- src/settings.h | 10 ++--- 12 files changed, 138 insertions(+), 98 deletions(-) diff --git a/src/database.c b/src/database.c index 2b40874..d580c65 100644 --- a/src/database.c +++ b/src/database.c @@ -32,6 +32,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "settings.h" #include "http.h" #include "zeerex.h" +#include "database.h" #include #if HAVE_SYS_SOCKET_H @@ -103,7 +104,8 @@ static struct host *find_host(const char *hostport) return create_host(hostport); } -static struct database *load_database(const char *id) +static struct database *load_database(const char *id, + struct conf_service *service) { xmlDoc *doc = 0; struct zr_explain *explain = 0; @@ -146,8 +148,9 @@ static struct database *load_database(const char *id) db->settings = 0; - db->settings = nmem_malloc(nmem, sizeof(struct settings*) * settings_num()); - memset(db->settings, 0, sizeof(struct settings*) * settings_num()); + db->settings = nmem_malloc(nmem, sizeof(struct settings*) * + settings_num(service)); + memset(db->settings, 0, sizeof(struct settings*) * settings_num(service)); idset = nmem_malloc(nmem, sizeof(*idset)); idset->precedence = 0; idset->name = "pz:id"; @@ -163,7 +166,8 @@ static struct database *load_database(const char *id) // Return a database structure by ID. Load and add to list if necessary // new==1 just means we know it's not in the list -struct database *find_database(const char *id, int new) +struct database *find_database(const char *id, int new, + struct conf_service *service) { struct database *p; if (!new) @@ -172,7 +176,7 @@ struct database *find_database(const char *id, int new) if (!strcmp(p->url, id)) return p; } - return load_database(id); + return load_database(id, service); } // This whole session_grep database thing should be moved elsewhere @@ -207,9 +211,11 @@ int match_zurl(const char *zurl, const char *pattern) } // This will be generalized at some point -static int match_criterion(struct setting **settings, struct database_criterion *c) +static int match_criterion(struct setting **settings, + struct conf_service *service, + struct database_criterion *c) { - int offset = settings_offset(c->name); + int offset = settings_offset(service, c->name); struct database_criterion_value *v; if (offset < 0) @@ -238,10 +244,12 @@ static int match_criterion(struct setting **settings, struct database_criterion return 0; } -int database_match_criteria(struct setting **settings, struct database_criterion *cl) +int database_match_criteria(struct setting **settings, + struct conf_service *service, + struct database_criterion *cl) { for (; cl; cl = cl->next) - if (!match_criterion(settings, cl)) + if (!match_criterion(settings, service, cl)) break; if (cl) // one of the criteria failed to match -- skip this db return 0; @@ -263,7 +271,7 @@ int session_grep_databases(struct session *se, struct database_criterion *cl, continue; if (!p->settings[PZ_NAME]) continue; - if (database_match_criteria(p->settings, cl)) + if (database_match_criteria(p->settings, se->service, cl)) { (*fun)(se, p); i++; @@ -272,14 +280,15 @@ int session_grep_databases(struct session *se, struct database_criterion *cl, return i; } -int predef_grep_databases(void *context, struct database_criterion *cl, +int predef_grep_databases(void *context, struct conf_service *service, + struct database_criterion *cl, void (*fun)(void *context, struct database *db)) { struct database *p; int i = 0; for (p = databases; p; p = p->next) - if (database_match_criteria(p->settings, cl)) + if (database_match_criteria(p->settings, service, cl)) { (*fun)(context, p); i++; diff --git a/src/database.h b/src/database.h index 82067e7..e7a51b2 100644 --- a/src/database.h +++ b/src/database.h @@ -21,11 +21,11 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define DATABASE_H void prepare_databases(void); -struct database *find_database(const char *id, int new); -int database_match_criteria(struct session_database *db, struct database_criterion *cl); +struct database *find_database(const char *id, int new, struct conf_service *service); int session_grep_databases(struct session *se, struct database_criterion *cl, void (*fun)(void *context, struct session_database *db)); -int predef_grep_databases(void *context, struct database_criterion *cl, +int predef_grep_databases(void *context, struct conf_service *service, + struct database_criterion *cl, void (*fun)(void *context, struct database *db)); int match_zurl(const char *zurl, const char *pattern); diff --git a/src/http_command.c b/src/http_command.c index ff35fdd..f88e296 100644 --- a/src/http_command.c +++ b/src/http_command.c @@ -62,12 +62,12 @@ static void session_timeout(IOCHAN i, int event) http_session_destroy(s); } -struct http_session *http_session_create(void) +struct http_session *http_session_create(struct conf_service *service) { NMEM nmem = nmem_create(); struct http_session *r = nmem_malloc(nmem, sizeof(*r)); - r->psession = new_session(nmem); + r->psession = new_session(nmem, service); r->session_id = 0; r->timestamp = 0; r->nmem = nmem; @@ -240,12 +240,18 @@ static void cmd_exit(struct http_channel *c) http_close_server(); } +static struct conf_service *locate_service(const char *service_name) +{ + return global_parameters.server->service; +} + static void cmd_init(struct http_channel *c) { unsigned int sesid; char buf[1024]; const char *clear = http_argbyname(c->request, "clear"); - struct http_session *s = http_session_create(); + const char *service_name = http_argbyname(c->request, "service"); + struct http_session *s = http_session_create(locate_service(service_name)); struct http_response *rs = c->response; yaz_log(YLOG_DEBUG, "HTTP Session init"); @@ -552,7 +558,7 @@ static void cmd_record(struct http_channel *c) struct http_session *s = locate_session(rq, rs); struct record_cluster *rec, *prev_r, *next_r; struct record *r; - struct conf_service *service = global_parameters.server->service; + struct conf_service *service = s->psession->service; const char *idstr = http_argbyname(rq, "id"); const char *offsetstr = http_argbyname(rq, "offset"); const char *binarystr = http_argbyname(rq, "binary"); @@ -677,7 +683,7 @@ static void show_records(struct http_channel *c, int active) numn = atoi(num); if (!sort) sort = "relevance"; - if (!(sp = reclist_parse_sortparms(c->nmem, sort))) + if (!(sp = reclist_parse_sortparms(c->nmem, sort, s->psession->service))) { error(rs, PAZPAR2_MALFORMED_PARAMETER_VALUE, "sort"); return; @@ -698,7 +704,7 @@ static void show_records(struct http_channel *c, int active) int ccount; struct record *p; struct record_cluster *rec = rl[i]; - struct conf_service *service = global_parameters.server->service; + struct conf_service *service = s->psession->service; wrbuf_puts(c->wrbuf, "\n"); write_metadata(c->wrbuf, service, rec->metadata, 0); diff --git a/src/logic.c b/src/logic.c index f565706..354fd7f 100644 --- a/src/logic.c +++ b/src/logic.c @@ -196,7 +196,7 @@ xmlDoc *record_to_xml(struct session_database *sdb, const char *rec) static void insert_settings_parameters(struct session_database *sdb, struct session *se, char **parms) { - struct conf_service *service = global_parameters.server->service; + struct conf_service *service = se->service; int i; int nparms = 0; int offset = 0; @@ -207,7 +207,7 @@ static void insert_settings_parameters(struct session_database *sdb, int setting; if (md->setting == Metadata_setting_parameter && - (setting = settings_offset(md->name)) > 0) + (setting = settings_offset(service, md->name)) > 0) { const char *val = session_setting_oneval(sdb, setting); if (val && nparms < MAX_XSLT_ARGS) @@ -229,9 +229,9 @@ static void insert_settings_parameters(struct session_database *sdb, } // Add static values from session database settings if applicable -static void insert_settings_values(struct session_database *sdb, xmlDoc *doc) +static void insert_settings_values(struct session_database *sdb, xmlDoc *doc, + struct conf_service *service) { - struct conf_service *service = global_parameters.server->service; int i; for (i = 0; i < service->num_metadata; i++) @@ -240,7 +240,7 @@ static void insert_settings_values(struct session_database *sdb, xmlDoc *doc) int offset; if (md->setting == Metadata_setting_postproc && - (offset = settings_offset(md->name)) > 0) + (offset = settings_offset(service, md->name)) > 0) { const char *val = session_setting_oneval(sdb, offset); if (val) @@ -287,7 +287,7 @@ xmlDoc *normalize_record(struct session_database *sdb, struct session *se, rdoc = new; } - insert_settings_values(sdb, rdoc); + insert_settings_values(sdb, rdoc, se->service); if (global_parameters.dump_records) { @@ -570,8 +570,9 @@ enum pazpar2_error_code search(struct session *se, static void session_init_databases_fun(void *context, struct database *db) { struct session *se = (struct session *) context; + struct conf_service *service = se->service; struct session_database *new = nmem_malloc(se->session_nmem, sizeof(*new)); - int num = settings_num(); + int num = settings_num(service); int i; new->database = db; @@ -604,7 +605,7 @@ static void session_database_destroy(struct session_database *sdb) void session_init_databases(struct session *se) { se->databases = 0; - predef_grep_databases(se, 0, session_init_databases_fun); + predef_grep_databases(se, se->service, 0, session_init_databases_fun); } // Probably session_init_databases_fun should be refactored instead of @@ -612,7 +613,7 @@ void session_init_databases(struct session *se) static struct session_database *load_session_database(struct session *se, char *id) { - struct database *db = find_database(id, 0); + struct database *db = find_database(id, 0, se->service); session_init_databases_fun((void*) se, db); // New sdb is head of se->databases list @@ -636,8 +637,9 @@ void session_apply_setting(struct session *se, char *dbname, char *setting, char *value) { struct session_database *sdb = find_session_database(se, dbname); + struct conf_service *service = se->service; struct setting *new = nmem_malloc(se->session_nmem, sizeof(*new)); - int offset = settings_offset_cprefix(setting); + int offset = settings_offset_cprefix(service, setting); if (offset < 0) { @@ -686,13 +688,14 @@ void destroy_session(struct session *s) wrbuf_destroy(s->wrbuf); } -struct session *new_session(NMEM nmem) +struct session *new_session(NMEM nmem, struct conf_service *service) { int i; struct session *session = nmem_malloc(nmem, sizeof(*session)); yaz_log(YLOG_DEBUG, "New Pazpar2 session"); - + + session->service = service; session->relevance = 0; session->total_hits = 0; session->total_records = 0; @@ -1073,7 +1076,7 @@ struct record *ingest_record(struct client *cl, const char *rec, const char *mergekey_norm; xmlChar *type = 0; xmlChar *value = 0; - struct conf_service *service = global_parameters.server->service; + struct conf_service *service = se->service; if (!xdoc) return 0; @@ -1092,7 +1095,7 @@ struct record *ingest_record(struct client *cl, const char *rec, record_no); cluster = reclist_insert(se->reclist, - global_parameters.server->service, + service, record, (char *) mergekey_norm, &se->total_merged); if (global_parameters.dump_records) diff --git a/src/pazpar2.c b/src/pazpar2.c index 6c8251a..ae091cc 100644 --- a/src/pazpar2.c +++ b/src/pazpar2.c @@ -36,13 +36,15 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA void child_handler(void *data) { + struct conf_service *service = global_parameters.server->service; start_proxy(); - init_settings(); + + init_settings(service); if (*global_parameters.settings_path_override) - settings_read(global_parameters.settings_path_override); + settings_read(service, global_parameters.settings_path_override); else if (global_parameters.server->settings) - settings_read(global_parameters.server->settings); + settings_read(service, global_parameters.server->settings); else yaz_log(YLOG_WARN, "No settings-directory specified"); global_parameters.odr_in = odr_createmem(ODR_DECODE); @@ -50,7 +52,6 @@ void child_handler(void *data) pazpar2_event_loop(); - } static void show_version(void) diff --git a/src/pazpar2.h b/src/pazpar2.h index 2a1f65c..5580046 100644 --- a/src/pazpar2.h +++ b/src/pazpar2.h @@ -121,6 +121,7 @@ struct session_watchentry { // End-user session struct session { + struct conf_service *service; /* service in use for this session */ struct session_database *databases; // All databases, settings overriden struct client *clients; // Clients connected for current search NMEM session_nmem; // Nmem for session-permanent storage @@ -163,7 +164,7 @@ struct hitsbytarget { struct hitsbytarget *hitsbytarget(struct session *s, int *count, NMEM nmem); int select_targets(struct session *se, struct database_criterion *crit); -struct session *new_session(NMEM nmem); +struct session *new_session(NMEM nmem, struct conf_service *service); void destroy_session(struct session *s); void session_init_databases(struct session *s); int load_targets(struct session *s, const char *fn); diff --git a/src/pazpar2_config.c b/src/pazpar2_config.c index 169de11..40af114 100644 --- a/src/pazpar2_config.c +++ b/src/pazpar2_config.c @@ -118,6 +118,8 @@ struct conf_service * conf_service_create(NMEM nmem, = nmem_malloc(nmem, sizeof(struct conf_sortkey) * service->num_sortkeys); + service->nmem = 0; + service->dictionary = 0; return service; } diff --git a/src/pazpar2_config.h b/src/pazpar2_config.h index 1e71619..8be4972 100644 --- a/src/pazpar2_config.h +++ b/src/pazpar2_config.h @@ -100,7 +100,8 @@ struct conf_service struct conf_metadata *metadata; int num_sortkeys; struct conf_sortkey *sortkeys; - + struct setting_dictionary *dictionary; + NMEM nmem; }; struct conf_service * conf_service_create(NMEM nmem, diff --git a/src/reclists.c b/src/reclists.c index afb4e3c..a6e63ee 100644 --- a/src/reclists.c +++ b/src/reclists.c @@ -93,11 +93,11 @@ reclist_sortparms_insert(NMEM nmem, #endif -struct reclist_sortparms *reclist_parse_sortparms(NMEM nmem, const char *parms) +struct reclist_sortparms *reclist_parse_sortparms(NMEM nmem, const char *parms, + struct conf_service *service) { struct reclist_sortparms *res = 0; struct reclist_sortparms **rp = &res; - struct conf_service *service = config->servers->service; if (strlen(parms) > 256) return 0; diff --git a/src/reclists.h b/src/reclists.h index 51653b1..e75b5da 100644 --- a/src/reclists.h +++ b/src/reclists.h @@ -70,7 +70,8 @@ struct record_cluster *reclist_insert( struct reclist *tl, void reclist_sort(struct reclist *l, struct reclist_sortparms *parms); struct record_cluster *reclist_read_record(struct reclist *l); void reclist_rewind(struct reclist *l); -struct reclist_sortparms *reclist_parse_sortparms(NMEM nmem, const char *parms); +struct reclist_sortparms *reclist_parse_sortparms(NMEM nmem, const char *parms, + struct conf_service *service); #endif diff --git a/src/settings.c b/src/settings.c index cbe8baf..578bc4c 100644 --- a/src/settings.c +++ b/src/settings.c @@ -44,8 +44,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "database.h" #include "settings.h" -static NMEM nmem = 0; - // Used for initializing setting_dictionary with pazpar2-specific settings static char *hard_settings[] = { "pz:piggyback", @@ -76,34 +74,32 @@ struct setting_dictionary int num; }; -static struct setting_dictionary *dictionary = 0; - // This establishes the precedence of wildcard expressions #define SETTING_WILDCARD_NO 0 // No wildcard #define SETTING_WILDCARD_DB 1 // Database wildcard 'host:port/*' #define SETTING_WILDCARD_YES 2 // Complete wildcard '*' // Returns size of settings directory -int settings_num(void) +int settings_num(struct conf_service *service) { - return dictionary->num; + return service->dictionary->num; } -int settings_offset(const char *name) +int settings_offset(struct conf_service *service, const char *name) { int i; if (!name) name = ""; - for (i = 0; i < dictionary->num; i++) - if (!strcmp(name, dictionary->dict[i])) + for (i = 0; i < service->dictionary->num; i++) + if (!strcmp(name, service->dictionary->dict[i])) return i; return -1; } // Ignores everything after second colon, if present // A bit of a hack to support the pz:cclmap: scheme (and more to come?) -int settings_offset_cprefix(const char *name) +int settings_offset_cprefix(struct conf_service *service, const char *name) { const char *p; int maxlen = 100; @@ -111,15 +107,15 @@ int settings_offset_cprefix(const char *name) if (!strncmp("pz:", name, 3) && (p = strchr(name + 3, ':'))) maxlen = (p - name) + 1; - for (i = 0; i < dictionary->num; i++) - if (!strncmp(name, dictionary->dict[i], maxlen)) + for (i = 0; i < service->dictionary->num; i++) + if (!strncmp(name, service->dictionary->dict[i], maxlen)) return i; return -1; } -char *settings_name(int offset) +char *settings_name(struct conf_service *service, int offset) { - return dictionary->dict[offset]; + return service->dictionary->dict[offset]; } static int isdir(const char *path) @@ -136,7 +132,9 @@ static int isdir(const char *path) // Read settings from an XML file, calling handler function for each setting static void read_settings_file(const char *path, - void (*fun)(struct setting *set)) + struct conf_service *service, + void (*fun)(struct conf_service *service, + struct setting *set)) { xmlDoc *doc = xmlParseFile(path); xmlNode *n; @@ -203,7 +201,7 @@ static void read_settings_file(const char *path, strcpy(valueb, (const char *) valuea); set.value = valueb; set.next = 0; - (*fun)(&set); + (*fun)(service, &set); } xmlFree(name); xmlFree(precedence); @@ -229,7 +227,9 @@ static void read_settings_file(const char *path, // Recursively read files or directories, invoking a // callback for each one static void read_settings(const char *path, - void (*fun)(struct setting *set)) + struct conf_service *service, + void (*fun)(struct conf_service *service, + struct setting *set)) { DIR *d; struct dirent *de; @@ -248,12 +248,12 @@ static void read_settings(const char *path, if (*de->d_name == '.' || !strcmp(de->d_name, "CVS")) continue; sprintf(tmp, "%s/%s", path, de->d_name); - read_settings(tmp, fun); + read_settings(tmp, service, fun); } closedir(d); } else if ((dot = strrchr(path, '.')) && !strcmp(dot + 1, "xml")) - read_settings_file(path, fun); + read_settings_file(path, service, fun); } // Determines if a ZURL is a wildcard, and what kind @@ -272,14 +272,17 @@ static int zurl_wildcard(const char *zurl) // Callback. Adds a new entry to the dictionary if necessary // This is used in pass 1 to determine layout of dictionary // and to load any databases mentioned -static void prepare_dictionary(struct setting *set) +static void prepare_dictionary(struct conf_service *service, + struct setting *set) { + struct setting_dictionary *dictionary = service->dictionary; + int i; char *p; // If target address is not wildcard, add the database if (*set->target && !zurl_wildcard(set->target)) - find_database(set->target, 0); + find_database(set->target, 0, service); // Determine if we already have a dictionary entry if (!strncmp(set->name, "pz:", 3) && (p = strchr(set->name + 3, ':'))) @@ -297,22 +300,32 @@ static void prepare_dictionary(struct setting *set) // Create a new dictionary entry // Grow dictionary if necessary if (!dictionary->size) - dictionary->dict = nmem_malloc(nmem, (dictionary->size = 50) * sizeof(char*)); + dictionary->dict = + nmem_malloc(service->nmem, (dictionary->size = 50) * sizeof(char*)); else if (dictionary->num + 1 > dictionary->size) { - char **tmp = nmem_malloc(nmem, dictionary->size * 2 * sizeof(char*)); + char **tmp = + nmem_malloc(service->nmem, dictionary->size * 2 * sizeof(char*)); memcpy(tmp, dictionary->dict, dictionary->size * sizeof(char*)); dictionary->dict = tmp; dictionary->size *= 2; } - dictionary->dict[dictionary->num++] = nmem_strdup(nmem, set->name); + dictionary->dict[dictionary->num++] = nmem_strdup(service->nmem, set->name); } +struct update_database_context { + struct setting *set; + struct conf_service *service; +}; + // This is called from grep_databases -- adds/overrides setting for a target // This is also where the rules for precedence of settings are implemented static void update_database(void *context, struct database *db) { - struct setting *set = (struct setting *) context; + struct setting *set = ((struct update_database_context *) + context)->set; + struct conf_service *service = ((struct update_database_context *) + context)->service; struct setting *s, **sp; int offset; @@ -320,7 +333,7 @@ static void update_database(void *context, struct database *db) if (!match_zurl(db->url, set->target)) return; - if ((offset = settings_offset_cprefix(set->name)) < 0) + if ((offset = settings_offset_cprefix(service, set->name)) < 0) abort(); // Should never get here // First we determine if this setting is overriding any existing settings @@ -344,13 +357,13 @@ static void update_database(void *context, struct database *db) } if (!s) // s will be null when there are no higher-priority settings -- we add one { - struct setting *new = nmem_malloc(nmem, sizeof(*new)); + struct setting *new = nmem_malloc(service->nmem, sizeof(*new)); memset(new, 0, sizeof(*new)); new->precedence = set->precedence; - new->target = nmem_strdup(nmem, set->target); - new->name = nmem_strdup(nmem, set->name); - new->value = nmem_strdup(nmem, set->value); + new->target = nmem_strdup(service->nmem, set->target); + new->name = nmem_strdup(service->nmem, set->name); + new->value = nmem_strdup(service->nmem, set->value); new->next = db->settings[offset]; db->settings[offset] = new; } @@ -358,16 +371,21 @@ static void update_database(void *context, struct database *db) // Callback -- updates database records with dictionary entries as appropriate // This is used in pass 2 to assign name/value pairs to databases -static void update_databases(struct setting *set) +static void update_databases(struct conf_service *service, + struct setting *set) { - predef_grep_databases(set, 0, update_database); + struct update_database_context context; + context.set = set; + context.service = service; + predef_grep_databases(&context, service, 0, update_database); } // This simply copies the 'hard' (application-specific) settings // to the settings dictionary. -static void initialize_hard_settings(struct setting_dictionary *dict) +static void initialize_hard_settings(struct conf_service *service) { - dict->dict = nmem_malloc(nmem, sizeof(hard_settings) - sizeof(char*)); + struct setting_dictionary *dict = service->dictionary; + dict->dict = nmem_malloc(service->nmem, sizeof(hard_settings) - sizeof(char*)); dict->size = (sizeof(hard_settings) - sizeof(char*)) / sizeof(char*); memcpy(dict->dict, hard_settings, dict->size * sizeof(char*)); dict->num = dict->size; @@ -375,9 +393,8 @@ static void initialize_hard_settings(struct setting_dictionary *dict) // Read any settings names introduced in service definition (config) and add to dictionary // This is done now to avoid errors if user settings are declared in session overrides -static void initialize_soft_settings(void) +static void initialize_soft_settings(struct conf_service *service) { - struct conf_service *service = config->servers->service; int i; for (i = 0; i < service->num_metadata; i++) @@ -393,31 +410,30 @@ static void initialize_soft_settings(void) set.name = md->name; set.value = ""; set.next = 0; - prepare_dictionary(&set); + prepare_dictionary(service, &set); } } // If we ever decide we need to be able to specify multiple settings directories, // the two calls to read_settings must be split -- so the dictionary is prepared // for the contents of every directory before the databases are updated. -void settings_read(const char *path) +void settings_read(struct conf_service *service, const char *path) { - read_settings(path, prepare_dictionary); - read_settings(path, update_databases); + read_settings(path, service, prepare_dictionary); + read_settings(path, service, update_databases); } -void init_settings(void) +void init_settings(struct conf_service *service) { struct setting_dictionary *new; - if (!nmem) - nmem = nmem_create(); - else - nmem_reset(nmem); - new = nmem_malloc(nmem, sizeof(*new)); + + service->nmem = nmem_create(); + + new = nmem_malloc(service->nmem, sizeof(*new)); memset(new, 0, sizeof(*new)); - initialize_hard_settings(new); - dictionary = new; - initialize_soft_settings(); + service->dictionary = new; + initialize_hard_settings(service); + initialize_soft_settings(service); } /* diff --git a/src/settings.h b/src/settings.h index 971c474..d211cb6 100644 --- a/src/settings.h +++ b/src/settings.h @@ -48,11 +48,11 @@ struct setting struct setting *next; }; -int settings_num(void); -void settings_read(const char *path); -int settings_offset(const char *name); -int settings_offset_cprefix(const char *name); -void init_settings(void); +int settings_num(struct conf_service *service); +void settings_read(struct conf_service *service, const char *path); +int settings_offset(struct conf_service *service, const char *name); +int settings_offset_cprefix(struct conf_service *service, const char *name); +void init_settings(struct conf_service *service); #endif -- 1.7.10.4