5 #include "asn1parser.h"
8 asn1p_oid_construct(asn1p_oid_arc_t *arc, int narcs) {
14 oid = asn1p_oid_new();
16 for(; narcs--; arc++) {
17 if(asn1p_oid_add_arc(oid, arc)) {
29 return calloc(1, sizeof(asn1p_oid_t));
33 asn1p_oid_add_arc(asn1p_oid_t *oid, asn1p_oid_arc_t *template) {
35 p = realloc(oid->arcs, (oid->arcs_count + 1) * sizeof(oid->arcs[0]));
38 oid->arcs[oid->arcs_count].name
39 = template->name?strdup(template->name):0;
40 oid->arcs[oid->arcs_count].number = template->number;
49 asn1p_oid_free(asn1p_oid_t *oid) {
52 while(oid->arcs_count--) {
53 free(oid->arcs[oid->arcs_count].name);
62 asn1p_oid_arc_new(const char *optName, asn1c_integer_t optNumber /* = -1 */) {
65 arc = calloc(1, sizeof *arc);
68 arc->name = strdup(optName);
69 arc->number = optNumber;
76 asn1p_oid_arc_free(asn1p_oid_arc_t *arc) {
84 asn1p_oid_compare(const asn1p_oid_t *a, const asn1p_oid_t *b) {
90 if(b->arcs_count > i) {
91 if(a->arcs_count <= i)
93 } else if(a->arcs_count > i) {
94 if(b->arcs_count <= i)
96 } else if(b->arcs_count <= i && a->arcs_count <= i) {
97 cmp = b->arcs_count - a->arcs_count;
105 cmp = b->arcs[i].number - a->arcs[i].number;