X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fzoom-opt.c;h=e7e77cb9ff8b9ae116e2907cb5a7ed959aba5d30;hp=fe1362bcf91f2f6a69442725214f33015df2111b;hb=62fd62f25a6893d042c4c87f8c770929fd8cf95d;hpb=fb6d99a0c7e07d9cc4a315c447deaf6564a85505 diff --git a/src/zoom-opt.c b/src/zoom-opt.c index fe1362b..e7e77cb 100644 --- a/src/zoom-opt.c +++ b/src/zoom-opt.c @@ -1,8 +1,8 @@ /* - * Copyright (C) 1995-2005, Index Data ApS + * Copyright (C) 1995-2007, Index Data ApS * See the file LICENSE for details. * - * $Id: zoom-opt.c,v 1.4 2005-06-25 15:46:07 adam Exp $ + * $Id: zoom-opt.c,v 1.6 2007-01-03 08:42:15 adam Exp $ */ /** * \file zoom-opt.c @@ -90,6 +90,21 @@ ZOOM_options_destroy (ZOOM_options opt) } } +/* PRIVATE to ZOOM_options_setl() */ +static void +_set_value(struct ZOOM_options_entry **e, const char *value, int len) +{ + (*e)->value = 0; + (*e)->len = 0; + if (value) + { + (*e)->value = (char *) xmalloc (len+1); + memcpy ((*e)->value, value, len); + (*e)->value[len] = '\0'; + (*e)->len = len; + } +} + ZOOM_API(void) ZOOM_options_setl (ZOOM_options opt, const char *name, const char *value, int len) @@ -102,26 +117,14 @@ ZOOM_options_setl (ZOOM_options opt, const char *name, const char *value, if (!strcmp((*e)->name, name)) { xfree ((*e)->value); - (*e)->value = 0; - if (value) - { - (*e)->value = (char *) xmalloc (len+1); - memcpy ((*e)->value, value, len); - (*e)->value[len] = '\0'; - } + _set_value(e, value, len); return; } e = &(*e)->next; } *e = (struct ZOOM_options_entry *) xmalloc (sizeof(**e)); (*e)->name = xstrdup (name); - (*e)->value = 0; - if (value) - { - (*e)->value = (char *) xmalloc (len+1); - memcpy ((*e)->value, value, len); - (*e)->value[len] = '\0'; - } + _set_value(e, value, len); (*e)->next = 0; } @@ -132,7 +135,7 @@ ZOOM_options_set (ZOOM_options opt, const char *name, const char *value) } ZOOM_API(const char *) -ZOOM_options_get (ZOOM_options opt, const char *name) +ZOOM_options_getl (ZOOM_options opt, const char *name, int *lenp) { const char *v = 0; if (!opt) @@ -146,16 +149,24 @@ ZOOM_options_get (ZOOM_options opt, const char *name) if (!strcmp(e->name, name)) { v = e->value; + *lenp = e->len; break; } } if (!v) - v = ZOOM_options_get(opt->parent1, name); + v = ZOOM_options_getl(opt->parent1, name, lenp); if (!v) - v = ZOOM_options_get(opt->parent2, name); + v = ZOOM_options_getl(opt->parent2, name, lenp); return v; } +ZOOM_API(const char *) +ZOOM_options_get (ZOOM_options opt, const char *name) +{ + int dummy; + return ZOOM_options_getl(opt, name, &dummy); +} + ZOOM_API(int) ZOOM_options_get_bool (ZOOM_options opt, const char *name, int defa) {