Header updates
[yaz-moved-to-github.git] / src / oid_util.c
1 /* This file is part of the YAZ toolkit.
2  * Copyright (C) 1995-2011 Index Data
3  * See the file LICENSE for details.
4  */
5
6 /**
7  * \file oid_util.c
8  * \brief Implements OID base utilities
9  *
10  */
11 #if HAVE_CONFIG_H
12 #include <config.h>
13 #endif
14
15 #include <stdlib.h>
16 #include <string.h>
17
18 #include <yaz/yaz-iconv.h>
19 #include <yaz/snprintf.h>
20 #include <yaz/oid_util.h>
21
22 void oid_oidcpy(Odr_oid *t, const Odr_oid *s)
23 {
24     while ((*(t++) = *(s++)) > -1);
25 }
26
27 void oid_oidcat(Odr_oid *t, const Odr_oid *s)
28 {
29     while (*t > -1)
30         t++;
31     while ((*(t++) = *(s++)) > -1);
32 }
33
34 int oid_oidcmp(const Odr_oid *o1, const Odr_oid *o2)
35 {
36     while (*o1 == *o2 && *o1 > -1)
37     {
38         o1++;
39         o2++;
40     }
41     if (*o1 == *o2)
42         return 0;
43     else if (*o1 > *o2)
44         return 1;
45     else
46         return -1;
47 }
48
49 int oid_oidlen(const Odr_oid *o)
50 {
51     int len = 0;
52
53     while (*(o++) >= 0)
54         len++;
55     return len;
56 }
57
58
59 char *oid_oid_to_dotstring(const Odr_oid *oid, char *oidbuf)
60 {
61     char tmpbuf[20];
62     int i;
63
64     oidbuf[0] = '\0';
65     for (i = 0; oid[i] != -1 && i < OID_SIZE; i++) 
66     {
67         yaz_snprintf(tmpbuf, sizeof(tmpbuf)-1, "%d", oid[i]);
68         if (i > 0)
69             strcat(oidbuf, ".");
70         strcat(oidbuf, tmpbuf);
71     }
72     return oidbuf;
73 }
74
75 int oid_dotstring_to_oid(const char *name, Odr_oid *oid)
76 {
77     int i = 0;
78     int val = 0;
79     while (yaz_isdigit (*name))
80     {
81         val = val*10 + (*name - '0');
82         name++;
83         if (*name == '.')
84         {
85             if (i < OID_SIZE-1)
86                 oid[i++] = val;
87             val = 0;
88             name++;
89         }
90     }
91     if (i == 0)
92         return -1;
93     oid[i] = val;
94     oid[i+1] = -1;
95     return 0;
96 }
97
98 /*
99  * Local variables:
100  * c-basic-offset: 4
101  * c-file-style: "Stroustrup"
102  * indent-tabs-mode: nil
103  * End:
104  * vim: shiftwidth=4 tabstop=8 expandtab
105  */
106