plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

ndblookval.c (791B)


      1 #include <u.h>
      2 #include <libc.h>
      3 #include <bio.h>
      4 #include <ip.h>
      5 #include <ndb.h>
      6 
      7 /*
      8  *  Look for a pair with the given attribute.  look first on the same line,
      9  *  then in the whole entry.
     10  */
     11 Ndbtuple*
     12 ndbfindattr(Ndbtuple *entry, Ndbtuple *line, char *attr)
     13 {
     14 	Ndbtuple *nt;
     15 
     16 	/* first look on same line (closer binding) */
     17 	for(nt = line; nt;){
     18 		if(strcmp(attr, nt->attr) == 0)
     19 			return nt;
     20 		nt = nt->line;
     21 		if(nt == line)
     22 			break;
     23 	}
     24 
     25 	/* search whole tuple */
     26 	for(nt = entry; nt; nt = nt->entry)
     27 		if(strcmp(attr, nt->attr) == 0)
     28 			return nt;
     29 
     30 	return nil;
     31 }
     32 
     33 Ndbtuple*
     34 ndblookval(Ndbtuple *entry, Ndbtuple *line, char *attr, char *to)
     35 {
     36 	Ndbtuple *t;
     37 
     38 	t = ndbfindattr(entry, line, attr);
     39 	if(t != nil){
     40 		strncpy(to, t->val, Ndbvlen-1);
     41 		to[Ndbvlen-1] = 0;
     42 	}
     43 	return t;
     44 }