Added prettier client.
[yaz-moved-to-github.git] / odr / odr_util.c
1 #include <stdlib.h>
2 #include <odr.h>
3
4 char *odr_indent(ODR o)
5 {
6     static char buf[512];
7
8     memset(buf, ' ', 512);
9     buf[o->indent * 4] = 0;
10     return buf;
11 }
12
13 int odp_more_chunks(ODR o, unsigned char *base, int len)
14 {
15     if (!len)
16         return 0;
17     if (len < 0) /* indefinite length */
18     {
19         if (*o->bp == 0 && *(o->bp + 1) == 0)
20         {
21             o->bp += 2;
22             o->left -= 2;
23             return 0;
24         }
25         else
26             return 1;
27     }
28     else
29         return o->bp - base < len;
30 }
31
32 /* OID utilities */
33
34 void odr_oidcpy(Odr_oid *t, Odr_oid *s)
35 {
36     while ((*(t++) = *(s++)) > -1);
37 }
38
39 void odr_oidcat(Odr_oid *t, Odr_oid *s)
40 {
41     while (*t > -1)
42         t++;
43     while ((*(t++) = *(s++)) > -1);
44 }
45
46 int odr_oidcmp(Odr_oid *o1, Odr_oid *o2)
47 {
48     while (*o1 == *o2 && *o1 > -1)
49     {
50         o1++;
51         o2++;
52     }
53     if (*o1 == *o2)
54         return 0;
55     else if (*o1 > *o2)
56         return 1;
57     else
58         return -1;
59 }
60
61 int odr_oidlen(Odr_oid *o)
62 {
63     int len = 0;
64
65     while (*(o++) >= 0)
66         len++;
67     return len;
68 }
69
70 Odr_oid *odr_oiddup(ODR odr, Odr_oid *o)
71 {
72     Odr_oid *r;
73
74     if (!o)
75         return 0;
76     if (!(r = odr_malloc(odr, (odr_oidlen(o) + 1) * sizeof(Odr_oid))))
77         return 0;
78     odr_oidcpy(r, o);
79     return r;
80 }