X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=odr%2Fodr_util.c;h=0cee5397764a537ffe8555032c2f959245d7977b;hp=0ea1c0803c3cab2d0e3efe2ec95e0ce64571e544;hb=4090fc5c7b77769020633d09cf63b325aceaf49a;hpb=5f4456fa00e080d850f7e25aba2f1e12cab8adcf diff --git a/odr/odr_util.c b/odr/odr_util.c index 0ea1c08..0cee539 100644 --- a/odr/odr_util.c +++ b/odr/odr_util.c @@ -1,11 +1,30 @@ +/* + * Copyright (c) 1995-1997, Index Data + * See the file LICENSE for details. + * Sebastian Hammer, Adam Dickmeiss + * + * $Log: odr_util.c,v $ + * 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 #include +#include char *odr_indent(ODR o) { static char buf[512]; + int i = o->indent; memset(buf, ' ', 512); + if (i >= 128) + i = 127; buf[o->indent * 4] = 0; return buf; } @@ -29,52 +48,44 @@ int odp_more_chunks(ODR o, unsigned char *base, int len) return o->bp - base < len; } -/* OID utilities */ - -void odr_oidcpy(Odr_oid *t, Odr_oid *s) +Odr_oid *odr_oiddup_nmem(NMEM nmem, Odr_oid *o) { - while ((*(t++) = *(s++)) > -1); -} + Odr_oid *r; -void odr_oidcat(Odr_oid *t, Odr_oid *s) -{ - while (*t > -1) - t++; - while ((*(t++) = *(s++)) > -1); + if (!o) + return 0; + if (!(r = nmem_malloc(nmem, (oid_oidlen(o) + 1) * sizeof(int)))) + return 0; + oid_oidcpy(r, o); + return r; } -int odr_oidcmp(Odr_oid *o1, Odr_oid *o2) +Odr_oid *odr_oiddup(ODR odr, Odr_oid *o) { - while (*o1 == *o2 && *o1 > -1) - { - o1++; - o2++; - } - if (*o1 == *o2) - return 0; - else if (*o1 > *o2) - return 1; - else - return -1; + return odr_oiddup_nmem (odr->mem, o); } -int odr_oidlen(Odr_oid *o) +Odr_oid *odr_getoidbystr_nmem(NMEM nmem, char *str) { - int len = 0; + int num = 1, i = 0; + char *p = str; + Odr_oid *ret; - while (*(o++) >= 0) - len++; - return len; + if (!isdigit(*str)) + return 0; + while ((p = strchr(p, '.'))) + num++, p++; + ret = nmem_malloc(nmem, sizeof(*ret)*(num + 1)); + p = str; + do + ret[i++] = atoi(p); + while ((p = strchr(p, '.')) && ++p); + ret[i] = -1; + return ret; } -Odr_oid *odr_oiddup(ODR odr, Odr_oid *o) +Odr_oid *odr_getoidbystr(ODR o, char *str) { - Odr_oid *r; - - if (!o) - return 0; - if (!(r = odr_malloc(odr, (odr_oidlen(o) + 1) * sizeof(Odr_oid)))) - return 0; - odr_oidcpy(r, o); - return r; + return odr_getoidbystr_nmem (o->mem, str); } +