X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=odr%2Fodr_util.c;h=0ea1c0803c3cab2d0e3efe2ec95e0ce64571e544;hp=af26baebbce4a98eda76be236651c2e6f9085888;hb=d32b1dbdc1f0392883547cc9e56c26f384a4c57f;hpb=173d9f50b7a6c63dff6c74dc5c3efe985f75ef39 diff --git a/odr/odr_util.c b/odr/odr_util.c index af26bae..0ea1c08 100644 --- a/odr/odr_util.c +++ b/odr/odr_util.c @@ -1,8 +1,14 @@ -#include #include +#include + +char *odr_indent(ODR o) +{ + static char buf[512]; -void *nalloc(ODR o, int size) { return malloc(size); } -char *odr_indent(ODR o) {return "";} + memset(buf, ' ', 512); + buf[o->indent * 4] = 0; + return buf; +} int odp_more_chunks(ODR o, unsigned char *base, int len) { @@ -22,3 +28,53 @@ int odp_more_chunks(ODR o, unsigned char *base, int len) else return o->bp - base < len; } + +/* OID utilities */ + +void odr_oidcpy(Odr_oid *t, Odr_oid *s) +{ + while ((*(t++) = *(s++)) > -1); +} + +void odr_oidcat(Odr_oid *t, Odr_oid *s) +{ + while (*t > -1) + t++; + while ((*(t++) = *(s++)) > -1); +} + +int odr_oidcmp(Odr_oid *o1, Odr_oid *o2) +{ + while (*o1 == *o2 && *o1 > -1) + { + o1++; + o2++; + } + if (*o1 == *o2) + return 0; + else if (*o1 > *o2) + return 1; + else + return -1; +} + +int odr_oidlen(Odr_oid *o) +{ + int len = 0; + + while (*(o++) >= 0) + len++; + return len; +} + +Odr_oid *odr_oiddup(ODR odr, Odr_oid *o) +{ + 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; +}