X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fsettings.c;h=ece8f043bf58b3317345a214d9a9eba704dcee42;hb=0f1fa7a2780b5d03377a4b4e57cba09c83f7b987;hp=a17d094bb9713e0eb781842dd269b369a874ed46;hpb=5f9bcb0650ab5b1661bf75f320dfbb204c6b6d6b;p=pazpar2-moved-to-github.git diff --git a/src/settings.c b/src/settings.c index a17d094..ece8f04 100644 --- a/src/settings.c +++ b/src/settings.c @@ -158,17 +158,24 @@ char *settings_name(struct conf_service *service, int offset) // Apply a session override to a database -void service_apply_setting(struct conf_service *service, char *setting, char *value) +void service_apply_setting(struct conf_service *service, char *name, char *value) { - struct setting *new = nmem_malloc(service->nmem, sizeof(*new)); - int offset = settings_create_offset(service, setting); + struct setting *s; + int offset = settings_create_offset(service, name); expand_settings_array(&service->settings->settings, &service->settings->num_settings, offset, service->nmem); - new->precedence = 0; - new->target = NULL; - new->name = setting; - new->value = value; - new->next = service->settings->settings[offset]; - service->settings->settings[offset] = new; + for (s = service->settings->settings[offset]; s; s = s->next) + if (!strcmp(s->name, name)) + { + s->value = value; + return; + } + s = nmem_malloc(service->nmem, sizeof(*s)); + s->precedence = 0; + s->target = NULL; + s->name = name; + s->value = value; + s->next = service->settings->settings[offset]; + service->settings->settings[offset] = s; }