vmm: Check VPPR and interrupt-window-blocking with RVI
[akaros.git] / user / ndblib / ndblookval.c
1 /* 
2  * This file is part of the UCB release of Plan 9. It is subject to the license
3  * terms in the LICENSE file found in the top-level directory of this
4  * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
5  * part of the UCB release of Plan 9, including this file, may be copied,
6  * modified, propagated, or distributed except according to the terms contained
7  * in the LICENSE file.
8  */
9 #include <stdlib.h>
10
11 #include <stdio.h>
12 #include <parlib/parlib.h>
13 #include <unistd.h>
14 #include <signal.h>
15 #include <fcntl.h>
16 #include <iplib/iplib.h>
17 #include <ndblib/ndb.h>
18
19 /*
20  *  Look for a pair with the given attribute.  look first on the same line,
21  *  then in the whole entry.
22  */
23 struct ndbtuple*
24 ndbfindattr(struct ndbtuple *entry, struct ndbtuple *line, char *attr)
25 {
26         struct ndbtuple *nt;
27
28         /* first look on same line (closer binding) */
29         for(nt = line; nt;){
30                 if(strcmp(attr, nt->attr) == 0)
31                         return nt;
32                 nt = nt->line;
33                 if(nt == line)
34                         break;
35         }
36
37         /* search whole tuple */
38         for(nt = entry; nt; nt = nt->entry)
39                 if(strcmp(attr, nt->attr) == 0)
40                         return nt;
41
42         return NULL;
43 }
44
45 struct ndbtuple*
46 ndblookval(struct ndbtuple *entry,
47            struct ndbtuple *line, char *attr, char *to)
48 {
49         struct ndbtuple *t;
50
51         t = ndbfindattr(entry, line, attr);
52         if(t != NULL){
53                 strncpy(to, t->val, Ndbvlen-1);
54                 to[Ndbvlen-1] = 0;
55         }
56         return t;
57 }