|
|
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));
}