X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=odr%2Fodr_util.c;h=72b80d6c27ee8073c62a199ae1f5e453b93323a8;hb=475b8ce3047108dcf7a87251733299077d7001e7;hp=ed3b07e6226f23ab6df59f0b134ef2cff81e238c;hpb=d5841c7c5616c3259c78e90cbf8e5e96ebd3ab31;p=yaz-moved-to-github.git diff --git a/odr/odr_util.c b/odr/odr_util.c index ed3b07e..72b80d6 100644 --- a/odr/odr_util.c +++ b/odr/odr_util.c @@ -1,3 +1,19 @@ +/* + * Copyright (c) 1995-1997, Index Data + * See the file LICENSE for details. + * Sebastian Hammer, Adam Dickmeiss + * + * $Log: odr_util.c,v $ + * Revision 1.13 1998-02-11 11:53:34 adam + * Changed code so that it compiles as C++. + * + * Revision 1.12 1997/10/31 12:20:08 adam + * Improved memory debugging for xmalloc/nmem.c. References to NMEM + * instead of ODR in n ESPEC-1 handling in source d1_espec.c. + * Bug fix: missing fclose in data1_read_espec1. + * + */ + #include #include #include @@ -35,19 +51,24 @@ int odp_more_chunks(ODR o, unsigned char *base, int len) return o->bp - base < len; } -Odr_oid *odr_oiddup(ODR odr, Odr_oid *o) +Odr_oid *odr_oiddup_nmem(NMEM nmem, Odr_oid *o) { Odr_oid *r; if (!o) return 0; - if (!(r = odr_malloc(odr, (oid_oidlen(o) + 1) * sizeof(int)))) + if (!(r = (int *)nmem_malloc(nmem, (oid_oidlen(o) + 1) * sizeof(int)))) return 0; oid_oidcpy(r, o); return r; } -Odr_oid *odr_getoidbystr(ODR o, char *str) +Odr_oid *odr_oiddup(ODR odr, Odr_oid *o) +{ + return odr_oiddup_nmem (odr->mem, o); +} + +Odr_oid *odr_getoidbystr_nmem(NMEM nmem, char *str) { int num = 1, i = 0; char *p = str; @@ -57,10 +78,17 @@ Odr_oid *odr_getoidbystr(ODR o, char *str) return 0; while ((p = strchr(p, '.'))) num++, p++; - ret = odr_malloc(o, sizeof(*ret)*num); + ret = (int *)nmem_malloc(nmem, sizeof(*ret)*(num + 1)); p = str; do ret[i++] = atoi(p); - while ((p = strchr(p, '.'))); + while ((p = strchr(p, '.')) && ++p); + ret[i] = -1; return ret; } + +Odr_oid *odr_getoidbystr(ODR o, char *str) +{ + return odr_getoidbystr_nmem (o->mem, str); +} +