readline.c 622 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. /* include readline */
  2. #include "unp.h"
  3. ssize_t
  4. readline(int fd, void *vptr, size_t maxlen)
  5. {
  6. ssize_t n, rc;
  7. char c, *ptr;
  8. ptr = vptr;
  9. for (n = 1; n < maxlen; n++) {
  10. if ( (rc = read(fd, &c, 1)) == 1) {
  11. *ptr++ = c;
  12. if (c == '\n')
  13. break;
  14. } else if (rc == 0) {
  15. if (n == 1)
  16. return(0); /* EOF, no data read */
  17. else
  18. break; /* EOF, some data was read */
  19. } else
  20. return(-1); /* error */
  21. }
  22. *ptr = 0;
  23. return(n);
  24. }
  25. /* end readline */
  26. ssize_t
  27. Readline(int fd, void *ptr, size_t maxlen)
  28. {
  29. ssize_t n;
  30. if ( (n = readline(fd, ptr, maxlen)) == -1)
  31. err_sys("readline error");
  32. return(n);
  33. }