X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;ds=sidebyside;f=zoom%2Fzoom-opt.c;h=19d1e49bb370879882ed669c3630f73d536a3647;hb=c914ef625a80051757013e6ae47db7a4798e18b5;hp=883a5a310946443a1b8b25aa43206a88d24d2188;hpb=2af1d65a7126d623ab596d831d6bc4257d75a051;p=yaz-moved-to-github.git diff --git a/zoom/zoom-opt.c b/zoom/zoom-opt.c index 883a5a3..19d1e49 100644 --- a/zoom/zoom-opt.c +++ b/zoom/zoom-opt.c @@ -1,5 +1,5 @@ /* - * $Id: zoom-opt.c,v 1.5 2002-05-17 12:48:30 adam Exp $ + * $Id: zoom-opt.c,v 1.7 2002-06-04 08:33:49 adam Exp $ * * ZOOM layer for C, options handling */ @@ -10,13 +10,20 @@ #include "zoom-p.h" ZOOM_API(ZOOM_options) +ZOOM_options_create_with_parent (ZOOM_options parent) +{ + return ZOOM_options_create_with_parent2(parent, 0); +} + +ZOOM_API(ZOOM_options) ZOOM_options_create (void) { return ZOOM_options_create_with_parent (0); } + ZOOM_API(ZOOM_options) -ZOOM_options_create_with_parent (ZOOM_options parent) +ZOOM_options_create_with_parent2 (ZOOM_options parent1, ZOOM_options parent2) { ZOOM_options opt = (ZOOM_options) xmalloc (sizeof(*opt)); @@ -24,12 +31,16 @@ ZOOM_options_create_with_parent (ZOOM_options parent) opt->callback_func = 0; opt->callback_handle = 0; opt->entries = 0; - opt->parent= parent; - if (parent) - (parent->refcount)++; + opt->parent1= parent1; + if (parent1) + (parent1->refcount)++; + opt->parent2= parent2; + if (parent2) + (parent2->refcount)++; return opt; } + void ZOOM_options_addref (ZOOM_options opt) { (opt->refcount)++; @@ -60,7 +71,8 @@ ZOOM_options_destroy (ZOOM_options opt) { struct ZOOM_options_entry *e; - ZOOM_options_destroy (opt->parent); + ZOOM_options_destroy (opt->parent1); + ZOOM_options_destroy (opt->parent2); e = opt->entries; while (e) { @@ -75,7 +87,8 @@ ZOOM_options_destroy (ZOOM_options opt) } ZOOM_API(void) -ZOOM_options_set (ZOOM_options opt, const char *name, const char *value) +ZOOM_options_setl (ZOOM_options opt, const char *name, const char *value, + int len) { struct ZOOM_options_entry **e; @@ -85,17 +98,35 @@ ZOOM_options_set (ZOOM_options opt, const char *name, const char *value) if (!strcmp((*e)->name, name)) { xfree ((*e)->value); - (*e)->value = xstrdup(value); + (*e)->value = 0; + if (value) + { + (*e)->value = xmalloc (len+1); + memcpy ((*e)->value, value, len); + (*e)->value[len] = '\0'; + } return; } e = &(*e)->next; } *e = (struct ZOOM_options_entry *) xmalloc (sizeof(**e)); (*e)->name = xstrdup (name); - (*e)->value = xstrdup (value); + (*e)->value = 0; + if (value) + { + (*e)->value = xmalloc (len+1); + memcpy ((*e)->value, value, len); + (*e)->value[len] = '\0'; + } (*e)->next = 0; } +ZOOM_API(void) +ZOOM_options_set (ZOOM_options opt, const char *name, const char *value) +{ + ZOOM_options_setl (opt, name, value, value ? strlen(value): 0); +} + ZOOM_API(const char *) ZOOM_options_get (ZOOM_options opt, const char *name) { @@ -115,7 +146,9 @@ ZOOM_options_get (ZOOM_options opt, const char *name) } } if (!v) - return ZOOM_options_get(opt->parent, name); + v = ZOOM_options_get(opt->parent1, name); + if (!v) + v = ZOOM_options_get(opt->parent2, name); return v; }