esock_read.c 434 B

12345678910111213141516171819202122232425
  1. #include "extreme.h"
  2. char *esock_read(int sockfd) {
  3. int got, pos = 0;
  4. char *buffer;
  5. if ((buffer = malloc(BUFLEN)) == NULL) {
  6. errno = ENOMEM;
  7. return NULL;
  8. }
  9. while ((got = read(sockfd, buffer + pos, BUFLEN)) == BUFLEN) {
  10. pos += got;
  11. if ((buffer = realloc(buffer, BUFLEN + pos + 1)) == NULL) {
  12. errno = ENOMEM;
  13. return NULL;
  14. }
  15. }
  16. pos += got;
  17. *(buffer + pos) = '\0';
  18. return (buffer);
  19. }