xref: /plan9/sys/src/cmd/ip/imap4d/csquery.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
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