getpwent.c 741 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include "pwf.h"
  2. static FILE *f;
  3. void setpwent()
  4. {
  5. if (f) fclose(f);
  6. f = 0;
  7. }
  8. weak_alias(setpwent, endpwent);
  9. struct passwd *getpwent()
  10. {
  11. static char *line;
  12. static struct passwd pw;
  13. size_t size=0;
  14. if (!f) f = fopen("/etc/passwd", "rb");
  15. if (!f) return 0;
  16. return __getpwent_a(f, &pw, &line, &size);
  17. }
  18. struct passwd *getpwuid(uid_t uid)
  19. {
  20. struct passwd *pw;
  21. int errno_saved;
  22. setpwent();
  23. while ((pw=getpwent()) && pw->pw_uid != uid);
  24. errno_saved = errno;
  25. endpwent();
  26. errno = errno_saved;
  27. return pw;
  28. }
  29. struct passwd *getpwnam(const char *name)
  30. {
  31. struct passwd *pw;
  32. int errno_saved;
  33. setpwent();
  34. while ((pw=getpwent()) && strcmp(pw->pw_name, name));
  35. errno_saved = errno;
  36. endpwent();
  37. errno = errno_saved;
  38. return pw;
  39. }