blob: deb8c381dd36c38c0314d09c5a569b076e00b61a [file] [log] [blame]
vlmfa67ddc2004-06-03 03:38:44 +00001#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4
5#include "asn1parser.h"
6
7asn1p_oid_t *
8asn1p_oid_new() {
9 return calloc(1, sizeof(asn1p_oid_t));
10}
11
12int
13asn1p_oid_add_arc(asn1p_oid_t *oid, asn1p_oid_arc_t *template) {
14 void *p;
15 p = realloc(oid->arcs, (oid->arcs_count + 1) * sizeof(oid->arcs[0]));
16 if(p) {
17 oid->arcs = p;
18 oid->arcs[oid->arcs_count].name
19 = template->name?strdup(template->name):0;
20 oid->arcs[oid->arcs_count].number = template->number;
21 oid->arcs_count++;
22 return 0;
23 } else {
24 return -1;
25 }
26}
27
28void
29asn1p_oid_free(asn1p_oid_t *oid) {
30 if(oid) {
31 if(oid->arcs) {
32 while(oid->arcs_count--) {
33 if(oid->arcs[oid->arcs_count].name)
34 free(oid->arcs[oid->arcs_count].name);
35 }
36 }
37 free(oid);
38 }
39}
40
41asn1p_oid_arc_t *
vlmec6acd42004-09-29 13:18:09 +000042asn1p_oid_arc_new(const char *optName, asn1c_integer_t optNumber /* = -1 */) {
vlmfa67ddc2004-06-03 03:38:44 +000043 asn1p_oid_arc_t *arc;
44
45 arc = calloc(1, sizeof *arc);
46 if(arc) {
47 if(optName)
48 arc->name = strdup(optName);
49 arc->number = optNumber;
50 }
51
52 return arc;
53}
54
55void
56asn1p_oid_arc_free(asn1p_oid_arc_t *arc) {
57 if(arc) {
58 if(arc->name)
59 free(arc->name);
60 free(arc);
61 }
62}
63
64int
65asn1p_oid_compare(asn1p_oid_t *a, asn1p_oid_t *b) {
66 int i;
67
68 for(i = 0; ; i++) {
vlmec6acd42004-09-29 13:18:09 +000069 asn1c_integer_t cmp;
vlmfa67ddc2004-06-03 03:38:44 +000070
71 if(b->arcs_count > i) {
72 if(a->arcs_count <= i)
73 return -1;
74 } else if(a->arcs_count > i) {
75 if(b->arcs_count <= i)
76 return 1;
77 } else if(b->arcs_count <= i && a->arcs_count <= i) {
78 cmp = b->arcs_count - a->arcs_count;
79 if(cmp < 0)
80 return -1;
81 else if(cmp > 0)
82 return 1;
83 return 0;
84 }
85
86 cmp = b->arcs[i].number - a->arcs[i].number;
87 if(cmp < 0)
88 return -1;
89 else if(cmp > 0)
90 return 1;
91 }
92
93}
94
95