|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T a
Length: 2499 (0x9c3) Types: TextFile Names: »as_str.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0 └─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z« └─⟦de7628f85⟧ └─⟦this⟧ »isode-6.0/dsap/common/as_str.c«
#include "quipu/util.h" #include "quipu/attrvalue.h" #include "quipu/malloc.h" oid_table_attr *AttrT_new_aux(); extern short acl_sntx; extern IFP merge_acl; Attr_Sequence str2as (str) register char * str; { register char * ptr; char * save, val; oid_table_attr *at; Attr_Sequence as; if (str == NULLCP) return (NULLATTR); if ((ptr = index (str,'=')) == 0) { parse_error ("equals missing %s",str); return (NULLATTR); } save = ptr++; if (! isspace (*--save)) save++; ptr = SkipSpace (ptr); if (*ptr == 0) return (NULLATTR); val = *save; *save = 0; if ((at = AttrT_new_aux (str)) == NULLTABLE_ATTR) { parse_error ("unknown attribute type '%s'",str); *ptr = '='; return (NULLATTR); } *save = val; as = as_comp_alloc (); as->attr_acl = NULLACL_INFO; as->attr_type.at_oid = NULLOID; as->attr_type.at_table = at; as->attr_link = NULLATTR; ATTRIBUTE_HEAP; if ((as->attr_value = str2avs (ptr,&as->attr_type)) == NULLAV) { RESTORE_HEAP; as_free (as); return (NULLATTR); } RESTORE_HEAP; return (as); } Attr_Sequence as_combine (as,str) Attr_Sequence as; register char * str; { register char * ptr; char * save, val; AV_Sequence avs; Attr_Sequence as2,nas; oid_table_attr *at; if (str == NULLCP) return (as); if ((ptr = index (str,'=')) == 0) { parse_error ("equals missing %s",str); return (as); } save = ptr++; if (! isspace (*--save)) save++; ptr = SkipSpace (ptr); if (*ptr == 0) return (as); val = *save; *save = 0; if ((at = AttrT_new_aux (str)) == NULLTABLE_ATTR) { parse_error ("unknown attribute type '%s'",str); *ptr = '='; return (as); } else for (as2=as; as2 != NULLATTR; as2=as2->attr_link) { if ( at == as2->attr_type.at_table ) { *save = val; ATTRIBUTE_HEAP; if (at->oa_syntax == acl_sntx) { (*merge_acl)(as2->attr_value,SkipSpace(ptr)); RESTORE_HEAP; return (as); } if ((avs = str2avs (ptr,&as2->attr_type)) == NULLAV) { RESTORE_HEAP; return (as); } as2->attr_value = avs_merge (as2->attr_value,avs); RESTORE_HEAP; return (as); } if ( at > as2->attr_type.at_table ) break; } *save = val; nas = as_comp_alloc (); nas->attr_acl = NULLACL_INFO; nas->attr_type.at_oid = NULLOID; nas->attr_type.at_table = at; nas->attr_link = NULLATTR; ATTRIBUTE_HEAP; if ((nas->attr_value = str2avs (ptr,&nas->attr_type)) == NULLAV) { RESTORE_HEAP; as_free (nas); return (as); } RESTORE_HEAP; return (as_merge(as,nas)); }