|
|
1.1 ! root 1: #include "quipu/util.h" ! 2: #include "quipu/name.h" ! 3: #include "quipu/malloc.h" ! 4: ! 5: RDN str2rdn_aux (str) ! 6: char * str; ! 7: { ! 8: AttributeType at; ! 9: char * ptr; ! 10: char * save, val; ! 11: char * TidyString(); ! 12: RDN rdn; ! 13: unsigned last_heap; ! 14: ! 15: /* look for "type = value" */ ! 16: ! 17: if (str == NULLCP) { ! 18: parse_error ("NULL rdn component",NULLCP); ! 19: return (NULLRDN); ! 20: } ! 21: ! 22: if ((ptr=index(str,'=')) == 0) { ! 23: parse_error ("Equals missing in RDN '%s'",str); ! 24: return (NULLRDN); ! 25: } ! 26: ! 27: save = ptr++; ! 28: save--; ! 29: if (! isspace (*save)) ! 30: save++; ! 31: val = *save; ! 32: *save = 0; ! 33: ! 34: if ((at = AttrT_new (TidyString(str))) == NULLTABLE_ATTR) { ! 35: parse_error ("Unknown attribute type in RDN '%s'",str); ! 36: *save = val; ! 37: return (NULLRDN); ! 38: } ! 39: ! 40: rdn = rdn_comp_alloc(); ! 41: rdn->rdn_next = NULLRDN; ! 42: rdn->rdn_at = at; ! 43: ! 44: if ((last_heap = mem_heap) == 1) ! 45: mem_heap = 2 + attr_index; ! 46: ! 47: if (str_at2AttrV_aux (ptr,rdn->rdn_at,&rdn->rdn_av) == NOTOK) { ! 48: *save = val; ! 49: mem_heap = last_heap; ! 50: free ((char *) rdn); ! 51: return (NULLRDN); ! 52: } ! 53: ! 54: mem_heap = last_heap; ! 55: *save = val; ! 56: return (rdn); ! 57: } ! 58: ! 59: ! 60: RDN str2rdn (str) ! 61: char * str; ! 62: { ! 63: register char *ptr; ! 64: register char *save,val; ! 65: RDN rdn = NULLRDN, newrdn; ! 66: ! 67: /* look for "rdn % rdn % rdn" */ ! 68: ! 69: if (str == NULLCP) ! 70: return (NULLRDN); ! 71: ! 72: while ( (ptr = index (str,'%')) != 0) { ! 73: save = ptr++; ! 74: save--; ! 75: if (! isspace (*save)) ! 76: save++; ! 77: val = *save; ! 78: *save = 0; ! 79: if ((newrdn = str2rdn_aux (str)) == NULLRDN) { ! 80: rdn_free (rdn); ! 81: return (NULLRDN); ! 82: } ! 83: ! 84: rdn = rdn_merge (rdn,newrdn); ! 85: *save = val; ! 86: str = ptr; ! 87: } ! 88: ! 89: if ((newrdn = str2rdn_aux (str)) == NULLRDN) { ! 90: rdn_free (rdn); ! 91: return (NULLRDN); ! 92: } ! 93: ! 94: return (rdn_merge (rdn,newrdn)); ! 95: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.