1 #include <u.h> 2 #include <libc.h> 3 #include <bio.h> 4 #include "imap4d.h" 5 6 /* 7 * query the connection server 8 */ 9 char* 10 csquery(char *attr, char *val, char *rattr) 11 { 12 char token[64+4]; 13 char buf[256], *p, *sp; 14 int fd, n; 15 16 if(val == nil || val[0] == 0) 17 return nil; 18 fd = open("/net/cs", ORDWR); 19 if(fd < 0) 20 return nil; 21 fprint(fd, "!%s=%s", attr, val); 22 seek(fd, 0, 0); 23 snprint(token, sizeof(token), "%s=", rattr); 24 for(;;){ 25 n = read(fd, buf, sizeof(buf)-1); 26 if(n <= 0) 27 break; 28 buf[n] = 0; 29 p = strstr(buf, token); 30 if(p != nil && (p == buf || *(p-1) == 0)){ 31 close(fd); 32 sp = strchr(p, ' '); 33 if(sp) 34 *sp = 0; 35 p = strchr(p, '='); 36 if(p == nil) 37 return nil; 38 return strdup(p+1); 39 } 40 } 41 close(fd); 42 return nil; 43 } 44