csquery.c 762 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <bio.h>
  4. #include <auth.h>
  5. #include "imap4d.h"
  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. if(val == nil || val[0] == 0)
  16. return nil;
  17. fd = open("/net/cs", ORDWR);
  18. if(fd < 0)
  19. return nil;
  20. fprint(fd, "!%s=%s", attr, val);
  21. seek(fd, 0, 0);
  22. snprint(token, sizeof(token), "%s=", rattr);
  23. for(;;){
  24. n = read(fd, buf, sizeof(buf)-1);
  25. if(n <= 0)
  26. break;
  27. buf[n] = 0;
  28. p = strstr(buf, token);
  29. if(p != nil && (p == buf || *(p-1) == 0)){
  30. close(fd);
  31. sp = strchr(p, ' ');
  32. if(sp)
  33. *sp = 0;
  34. p = strchr(p, '=');
  35. if(p == nil)
  36. return nil;
  37. return strdup(p+1);
  38. }
  39. }
  40. close(fd);
  41. return nil;
  42. }