X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=odr%2Fodr_util.c;h=26a672c1fdb5e393d4e5161056f355b7e7177da6;hp=7a07775ac5230839ac7452ebacc292ff77266eb5;hb=ec1f815d5348cd21e393f76bc212c910c34bbc45;hpb=63cafe41a93427118959a74201b3e331169a71d9 diff --git a/odr/odr_util.c b/odr/odr_util.c index 7a07775..26a672c 100644 --- a/odr/odr_util.c +++ b/odr/odr_util.c @@ -1,20 +1,28 @@ +/* + * Copyright (c) 1995-2003, Index Data + * See the file LICENSE for details. + * + * $Id: odr_util.c,v 1.23 2003-05-20 19:55:30 adam Exp $ + */ +#if HAVE_CONFIG_H +#include +#endif + #include -#include -#include +#include +#include +#include "odr-priv.h" +#include -char *odr_indent(ODR o) +void odr_prname(ODR o, const char *name) { - static char buf[512]; - int i = o->indent; - - memset(buf, ' ', 512); - if (i >= 128) - i = 127; - buf[o->indent * 4] = 0; - return buf; + if (name) + fprintf (o->print, "%*s%s ", o->indent*4, "", name); + else + fprintf (o->print, "%*s", o->indent*4, ""); } -int odp_more_chunks(ODR o, unsigned char *base, int len) +int odp_more_chunks(ODR o, const unsigned char *base, int len) { if (!len) return 0; @@ -23,7 +31,6 @@ int odp_more_chunks(ODR o, unsigned char *base, int len) if (*o->bp == 0 && *(o->bp + 1) == 0) { o->bp += 2; - o->left -= 2; return 0; } else @@ -33,14 +40,56 @@ 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_oiddup(ODR odr, Odr_oid *o) +{ + return odr_oiddup_nmem (odr->mem, o); +} + +Odr_oid *odr_getoidbystr_nmem(NMEM nmem, const char *str) +{ + int num = 1, i = 0; + const char *p = str; + Odr_oid *ret; + + if (!isdigit(*str)) + return 0; + while ((p = strchr(p, '.'))) + num++, p++; + ret = (int *)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_getoidbystr(ODR o, const char *str) +{ + return odr_getoidbystr_nmem (o->mem, str); +} + +int odr_missing(ODR o, int opt, const char *name) +{ + if (o->error) + return 0; + if (!opt) + { + printf ("odr_missing set error : %s\n", name); + odr_seterror(o, OREQUIRED, 55); + odr_setaddinfo(o, name); + } + return opt; +}