X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fodr_util.c;h=dc37ca36af3b8d8d9a3117e85417e2772f27fb05;hp=d95a693841daeeb30b2218784b4299b61606c8c4;hb=0a7d4354288c747883261e9f430a7e0069225a5b;hpb=c6e47cbbff56f39f6d81b079ebaeac41d793d4d9 diff --git a/src/odr_util.c b/src/odr_util.c index d95a693..dc37ca3 100644 --- a/src/odr_util.c +++ b/src/odr_util.c @@ -1,8 +1,8 @@ /* - * Copyright (c) 1995-2003, Index Data + * Copyright (c) 1995-2004, Index Data * See the file LICENSE for details. * - * $Id: odr_util.c,v 1.1 2003-10-27 12:21:34 adam Exp $ + * $Id: odr_util.c,v 1.4 2004-08-11 12:15:38 adam Exp $ */ #if HAVE_CONFIG_H #include @@ -17,9 +17,9 @@ void odr_prname(ODR o, const char *name) { if (name) - fprintf (o->print, "%*s%s ", o->indent*4, "", name); + odr_printf(o, "%*s%s ", o->indent*4, "", name); else - fprintf (o->print, "%*s", o->indent*4, ""); + odr_printf(o, "%*s", o->indent*4, ""); } int odp_more_chunks(ODR o, const unsigned char *base, int len) @@ -54,6 +54,8 @@ Odr_oid *odr_oiddup_nmem(NMEM nmem, Odr_oid *o) Odr_oid *odr_oiddup(ODR odr, Odr_oid *o) { + if (!odr->mem) + odr->mem = nmem_create(); return odr_oiddup_nmem (odr->mem, o); } @@ -78,6 +80,8 @@ Odr_oid *odr_getoidbystr_nmem(NMEM nmem, const char *str) Odr_oid *odr_getoidbystr(ODR o, const char *str) { + if (!o->mem) + o->mem = nmem_create(); return odr_getoidbystr_nmem (o->mem, str); } @@ -92,3 +96,29 @@ int odr_missing(ODR o, int opt, const char *name) } return opt; } + +/* + * Reallocate the buffer `old', using the ODR memory pool `o' to be + * big enough to hold its existing value (if any) plus `prefix' (if + * any) and a separator character. Copy `prefix', a forward slash and + * the old value into the new area and return its address. Can be + * used as follows: + * initRequest->implementationName = odr_prepend(o, + * initRequest->implementationName, "ZOOM-C"); + */ +char *odr_prepend(ODR o, const char *prefix, const char *old) +{ + int plen = (prefix == 0) ? 0 : strlen(prefix); + int olen = (old == 0) ? 0 : strlen(old); + char *res = (char*) odr_malloc (o, olen + plen + 2); + + *res = '\0'; + if (prefix != 0) + strcpy (res, prefix); + if (prefix != 0 && old != 0) + strcat (res, "/"); + if (old !=0) + strcat (res, old); + + return res; +}