rdbio.c 958 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <bio.h>
  4. #include <ctype.h>
  5. #include "authcmdlib.h"
  6. void
  7. clrbio(Acctbio *a)
  8. {
  9. int i;
  10. if(a->user)
  11. free(a->user);
  12. if(a->postid)
  13. free(a->postid);
  14. if(a->name)
  15. free(a->name);
  16. if(a->dept)
  17. free(a->dept);
  18. for(i = 0; i < Nemail; i++)
  19. if(a->email[i])
  20. free(a->email[i]);
  21. memset(a, 0, sizeof(Acctbio));
  22. }
  23. void
  24. rdbio(char *file, char *user, Acctbio *a)
  25. {
  26. int i,n;
  27. Biobuf *b;
  28. char *p;
  29. char *field[20];
  30. memset(a, 0, sizeof(Acctbio));
  31. b = Bopen(file, OREAD);
  32. if(b == 0)
  33. return;
  34. while(p = Brdline(b, '\n')){
  35. p[Blinelen(b)-1] = 0;
  36. n = getfields(p, field, nelem(field), 0, "|");
  37. if(n < 4)
  38. continue;
  39. if(strcmp(field[0], user) != 0)
  40. continue;
  41. clrbio(a);
  42. a->postid = strdup(field[1]);
  43. a->name = strdup(field[2]);
  44. a->dept = strdup(field[3]);
  45. if(n-4 >= Nemail)
  46. n = Nemail-4;
  47. for(i = 4; i < n; i++)
  48. a->email[i-4] = strdup(field[i]);
  49. }
  50. a->user = strdup(user);
  51. Bterm(b);
  52. }