X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=zoom%2Fzoom-opt.c;h=19d1e49bb370879882ed669c3630f73d536a3647;hb=5f065af405ec0934b14756307d27eed69a3d9833;hp=ddb5a896d8e02da8bc728c0e429ae08908708e04;hpb=69bcd68523a9a8da083faef16887100369152673;p=yaz-moved-to-github.git diff --git a/zoom/zoom-opt.c b/zoom/zoom-opt.c index ddb5a89..19d1e49 100644 --- a/zoom/zoom-opt.c +++ b/zoom/zoom-opt.c @@ -1,5 +1,5 @@ /* - * $Id: zoom-opt.c,v 1.1 2001-10-23 21:00:20 adam Exp $ + * $Id: zoom-opt.c,v 1.7 2002-06-04 08:33:49 adam Exp $ * * ZOOM layer for C, options handling */ @@ -9,36 +9,50 @@ #include "zoom-p.h" -Z3950_options Z3950_options_create (void) +ZOOM_API(ZOOM_options) +ZOOM_options_create_with_parent (ZOOM_options parent) { - return Z3950_options_create_with_parent (0); + return ZOOM_options_create_with_parent2(parent, 0); } -Z3950_options Z3950_options_create_with_parent (Z3950_options parent) +ZOOM_API(ZOOM_options) +ZOOM_options_create (void) { - Z3950_options opt = xmalloc (sizeof(*opt)); + return ZOOM_options_create_with_parent (0); +} + + +ZOOM_API(ZOOM_options) +ZOOM_options_create_with_parent2 (ZOOM_options parent1, ZOOM_options parent2) +{ + ZOOM_options opt = (ZOOM_options) xmalloc (sizeof(*opt)); opt->refcount = 1; 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 Z3950_options_addref (Z3950_options opt) + +void ZOOM_options_addref (ZOOM_options opt) { (opt->refcount)++; } -Z3950_options_callback Z3950_options_set_callback ( - Z3950_options opt, - Z3950_options_callback callback_func, +ZOOM_API(ZOOM_options_callback) +ZOOM_options_set_callback ( + ZOOM_options opt, + ZOOM_options_callback callback_func, void *callback_handle) { - Z3950_options_callback callback_old; + ZOOM_options_callback callback_old; assert (opt); callback_old = opt->callback_func; @@ -47,20 +61,22 @@ Z3950_options_callback Z3950_options_set_callback ( return callback_old; } -void Z3950_options_destroy (Z3950_options opt) +ZOOM_API(void) +ZOOM_options_destroy (ZOOM_options opt) { if (!opt) return; (opt->refcount)--; if (opt->refcount == 0) { - struct Z3950_options_entry *e; + struct ZOOM_options_entry *e; - Z3950_options_destroy (opt->parent); + ZOOM_options_destroy (opt->parent1); + ZOOM_options_destroy (opt->parent2); e = opt->entries; while (e) { - struct Z3950_options_entry *e0 = e; + struct ZOOM_options_entry *e0 = e; xfree (e->name); xfree (e->value); e = e->next; @@ -70,9 +86,11 @@ void Z3950_options_destroy (Z3950_options opt) } } -void Z3950_options_set (Z3950_options opt, const char *name, const char *value) +ZOOM_API(void) +ZOOM_options_setl (ZOOM_options opt, const char *name, const char *value, + int len) { - struct Z3950_options_entry **e; + struct ZOOM_options_entry **e; e = &opt->entries; while (*e) @@ -80,18 +98,37 @@ void Z3950_options_set (Z3950_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 = xmalloc (sizeof(**e)); + *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; } -const char *Z3950_options_get (Z3950_options opt, const char *name) +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) { const char *v = 0; if (!opt) @@ -100,7 +137,7 @@ const char *Z3950_options_get (Z3950_options opt, const char *name) v = (*opt->callback_func)(opt->callback_handle, name); if (!v) { - struct Z3950_options_entry *e; + struct ZOOM_options_entry *e; for (e = opt->entries; e; e = e->next) if (!strcmp(e->name, name)) { @@ -109,13 +146,16 @@ const char *Z3950_options_get (Z3950_options opt, const char *name) } } if (!v) - return Z3950_options_get(opt->parent, name); + v = ZOOM_options_get(opt->parent1, name); + if (!v) + v = ZOOM_options_get(opt->parent2, name); return v; } -int Z3950_options_get_bool (Z3950_options opt, const char *name, int defa) +ZOOM_API(int) +ZOOM_options_get_bool (ZOOM_options opt, const char *name, int defa) { - const char *v = Z3950_options_get (opt, name); + const char *v = ZOOM_options_get (opt, name); if (!v) return defa; @@ -124,11 +164,21 @@ int Z3950_options_get_bool (Z3950_options opt, const char *name, int defa) return 0; } -int Z3950_options_get_int (Z3950_options opt, const char *name, int defa) +ZOOM_API(int) +ZOOM_options_get_int (ZOOM_options opt, const char *name, int defa) { - const char *v = Z3950_options_get (opt, name); + const char *v = ZOOM_options_get (opt, name); if (!v || !*v) return defa; return atoi(v); } + +ZOOM_API(void) +ZOOM_options_set_int(ZOOM_options opt, const char *name, int value) +{ + char s[40]; + + sprintf (s, "%d", value); + ZOOM_options_set (opt, name, s); +}