X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=odr%2Fodr_util.c;h=dc280d74dea856374f0cabb46e5c2b2559ae0b32;hp=fb4c7c0d16098f543328cf8d009d68ce4b80e4ec;hb=30cfc59b71c25923e2e9cfb63c310c095bb3b6c1;hpb=892f7f56860a1ee8e8d816eeaec0387c54c1a0a7 diff --git a/odr/odr_util.c b/odr/odr_util.c index fb4c7c0..dc280d7 100644 --- a/odr/odr_util.c +++ b/odr/odr_util.c @@ -1,16 +1,47 @@ -#include +/* + * Copyright (c) 1995-1999, Index Data + * See the file LICENSE for details. + * Sebastian Hammer, Adam Dickmeiss + * + * $Log: odr_util.c,v $ + * Revision 1.17 1999-11-30 13:47:12 adam + * Improved installation. Moved header files to include/yaz. + * + * Revision 1.16 1999/04/20 09:56:48 adam + * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun). + * Modified all encoders/decoders to reflect this change. + * + * Revision 1.15 1999/01/08 11:23:29 adam + * Added const modifier to some of the BER/ODR encoding routines. + * + * Revision 1.14 1998/10/13 15:58:36 adam + * Minor fix in odr_getoidbystr_nmem. + * + * 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 +#include +#include -char *odr_indent(ODR o) +void odr_prname(ODR o, const char *name) { - static char buf[512]; - - memset(buf, ' ', 512); - 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; @@ -28,3 +59,45 @@ int odp_more_chunks(ODR o, unsigned char *base, int len) else return o->bp - base < len; } + +Odr_oid *odr_oiddup_nmem(NMEM nmem, Odr_oid *o) +{ + Odr_oid *r; + + if (!o) + return 0; + 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, char *str) +{ + int num = 1, i = 0; + 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, char *str) +{ + return odr_getoidbystr_nmem (o->mem, str); +} +