diff options
author | rsc <devnull@localhost> | 2005-02-13 05:58:45 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2005-02-13 05:58:45 +0000 |
commit | 0f8ec41b0ae522b73085fa1662461e6351ba7e54 (patch) | |
tree | 2d54cfd8208bdd903273ccc7df889677cf7fe8d5 /src/cmd/factotum/attr.c | |
parent | 7637c81af02c49ef508b946dfdec39f757a658d4 (diff) | |
download | plan9port-0f8ec41b0ae522b73085fa1662461e6351ba7e54.tar.gz plan9port-0f8ec41b0ae522b73085fa1662461e6351ba7e54.tar.bz2 plan9port-0f8ec41b0ae522b73085fa1662461e6351ba7e54.zip |
moving to auth
Diffstat (limited to 'src/cmd/factotum/attr.c')
-rw-r--r-- | src/cmd/factotum/attr.c | 231 |
1 files changed, 0 insertions, 231 deletions
diff --git a/src/cmd/factotum/attr.c b/src/cmd/factotum/attr.c deleted file mode 100644 index b92e96a0..00000000 --- a/src/cmd/factotum/attr.c +++ /dev/null @@ -1,231 +0,0 @@ -#include "std.h" -#include "dat.h" - -Attr* -addattr(Attr *a, char *fmt, ...) -{ - char buf[1024]; - va_list arg; - Attr *b; - - va_start(arg, fmt); - vseprint(buf, buf+sizeof buf, fmt, arg); - va_end(arg); - b = _parseattr(buf); - a = addattrs(a, b); - setmalloctag(a, getcallerpc(&a)); - _freeattr(b); - return a; -} - -/* - * add attributes in list b to list a. If any attributes are in - * both lists, replace those in a by those in b. - */ -Attr* -addattrs(Attr *a, Attr *b) -{ - int found; - Attr **l, *aa; - - for(; b; b=b->next){ - switch(b->type){ - case AttrNameval: - for(l=&a; *l; ){ - if(strcmp((*l)->name, b->name) != 0){ - l=&(*l)->next; - continue; - } - aa = *l; - *l = aa->next; - aa->next = nil; - freeattr(aa); - } - *l = mkattr(AttrNameval, b->name, b->val, nil); - break; - case AttrQuery: - found = 0; - for(l=&a; *l; l=&(*l)->next) - if((*l)->type==AttrNameval && strcmp((*l)->name, b->name) == 0) - found++; - if(!found) - *l = mkattr(AttrQuery, b->name, b->val, nil); - break; - } - } - return a; -} - -void -setmalloctaghere(void *v) -{ - setmalloctag(v, getcallerpc(&v)); -} - -Attr* -sortattr(Attr *a) -{ - int i; - Attr *anext, *a0, *a1, **l; - - if(a == nil || a->next == nil) - return a; - - /* cut list in halves */ - a0 = nil; - a1 = nil; - i = 0; - for(; a; a=anext){ - anext = a->next; - if(i++%2){ - a->next = a0; - a0 = a; - }else{ - a->next = a1; - a1 = a; - } - } - - /* sort */ - a0 = sortattr(a0); - a1 = sortattr(a1); - - /* merge */ - l = &a; - while(a0 || a1){ - if(a1==nil){ - anext = a0; - a0 = a0->next; - }else if(a0==nil){ - anext = a1; - a1 = a1->next; - }else if(strcmp(a0->name, a1->name) < 0){ - anext = a0; - a0 = a0->next; - }else{ - anext = a1; - a1 = a1->next; - } - *l = anext; - l = &(*l)->next; - } - *l = nil; - return a; -} - -int -attrnamefmt(Fmt *fmt) -{ - char *b, buf[1024], *ebuf; - Attr *a; - - ebuf = buf+sizeof buf; - b = buf; - strcpy(buf, " "); - for(a=va_arg(fmt->args, Attr*); a; a=a->next){ - if(a->name == nil) - continue; - b = seprint(b, ebuf, " %q?", a->name); - } - return fmtstrcpy(fmt, buf+1); -} - -/* -static int -hasqueries(Attr *a) -{ - for(; a; a=a->next) - if(a->type == AttrQuery) - return 1; - return 0; -} -*/ - -char *ignored[] = { - "role", - "disabled", -}; - -static int -ignoreattr(char *s) -{ - int i; - - for(i=0; i<nelem(ignored); i++) - if(strcmp(ignored[i], s)==0) - return 1; - return 0; -} - -static int -hasname(Attr *a0, Attr *a1, char *name) -{ - return _findattr(a0, name) || _findattr(a1, name); -} - -static int -hasnameval(Attr *a0, Attr *a1, char *name, char *val) -{ - Attr *a; - - for(a=_findattr(a0, name); a; a=_findattr(a->next, name)) - if(strcmp(a->val, val) == 0) - return 1; - for(a=_findattr(a1, name); a; a=_findattr(a->next, name)) - if(strcmp(a->val, val) == 0) - return 1; - return 0; -} - -int -matchattr(Attr *pat, Attr *a0, Attr *a1) -{ - int type; - - for(; pat; pat=pat->next){ - type = pat->type; - if(ignoreattr(pat->name)) - type = AttrDefault; - switch(type){ - case AttrQuery: /* name=something be present */ - if(!hasname(a0, a1, pat->name)) - return 0; - break; - case AttrNameval: /* name=val must be present */ - if(!hasnameval(a0, a1, pat->name, pat->val)) - return 0; - break; - case AttrDefault: /* name=val must be present if name=anything is present */ - if(hasname(a0, a1, pat->name) && !hasnameval(a0, a1, pat->name, pat->val)) - return 0; - break; - } - } - return 1; -} - -Attr* -parseattrfmtv(char *fmt, va_list arg) -{ - char *s; - Attr *a; - - s = vsmprint(fmt, arg); - if(s == nil) - sysfatal("vsmprint: out of memory"); - a = parseattr(s); - free(s); - return a; -} - -Attr* -parseattrfmt(char *fmt, ...) -{ - va_list arg; - Attr *a; - - va_start(arg, fmt); - a = parseattrfmtv(fmt, arg); - va_end(arg); - return a; -} |