From: Mike Taylor Date: Wed, 26 Nov 2003 16:23:42 +0000 (+0000) Subject: Add odr_prepend() X-Git-Tag: YAZ.2.0.6~11 X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=commitdiff_plain;h=4fbc7c05a14d80187951b2fc690ba71374449124 Add odr_prepend() --- diff --git a/include/yaz/odr.h b/include/yaz/odr.h index 6d1c30a..1a2e690 100644 --- a/include/yaz/odr.h +++ b/include/yaz/odr.h @@ -23,7 +23,7 @@ * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE * OF THIS SOFTWARE. * - * $Id: odr.h,v 1.13 2003-10-16 10:37:06 adam Exp $ + * $Id: odr.h,v 1.14 2003-11-26 16:24:04 mike Exp $ */ #ifndef ODR_H @@ -297,6 +297,7 @@ YAZ_EXPORT int odr_initmember(ODR o, void *p, int size); YAZ_EXPORT int odr_peektag(ODR o, int *zclass, int *tag, int *cons); YAZ_EXPORT void odr_setlenlen(ODR o, int len); YAZ_EXPORT int odr_missing(ODR o, int opt, const char *name); +YAZ_EXPORT char *odr_prepend(ODR o, const char *prefix, const char *old); typedef struct Odr_external { diff --git a/src/odr_util.c b/src/odr_util.c index d95a693..bb1955c 100644 --- a/src/odr_util.c +++ b/src/odr_util.c @@ -2,7 +2,7 @@ * Copyright (c) 1995-2003, 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.2 2003-11-26 16:23:42 mike Exp $ */ #if HAVE_CONFIG_H #include @@ -92,3 +92,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; +}