From: mmj Date: Wed, 2 Jun 2004 21:50:40 +0000 (+1000) Subject: mygetline EINTR handling and errno = 0 X-Git-Tag: RELEASE_1_0_0~176 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e34c7db18a74a113642bbdca2056e70c94673d8f;p=thirdparty%2Fmlmmj.git mygetline EINTR handling and errno = 0 --- diff --git a/src/mail-functions.c b/src/mail-functions.c index cdfc1c53..8b0e25b0 100644 --- a/src/mail-functions.c +++ b/src/mail-functions.c @@ -126,6 +126,7 @@ int write_mailbody_from_file(int sockfd, FILE *infile) * occurred */ if(!fgets(bufp, WRITE_BUFSIZE, infile)) { if (errno == EINTR) { + errno = 0; continue; } else { return errno; diff --git a/src/mygetline.c b/src/mygetline.c index f09d0054..356e190c 100644 --- a/src/mygetline.c +++ b/src/mygetline.c @@ -11,6 +11,7 @@ #include #include #include +#include #include "mygetline.h" char *myfgetline(FILE *infile) @@ -45,14 +46,34 @@ char *myfgetline(FILE *infile) } } + char *mygetline(int fd) { - size_t i = 0, buf_size = BUFSIZE; /* initial buffer size */ + size_t i = 0, res, buf_size = BUFSIZE; /* initial buffer size */ char *buf = malloc(buf_size); char ch; buf[0] = '\0'; - while(read(fd, &ch, 1) > 0) { + while(1) { + res = read(fd, &ch, 1); + if(res < 0) { + if(errno == EINTR) + continue; + else { + free(buf); + return NULL; + } + } + if(res == 0) { + if(buf[0]) { + buf[i] = '\0'; + return buf; + } else { + free(buf); + return NULL; + } + } + if(i == buf_size - 1) { buf_size *= 2; buf = realloc(buf, buf_size); @@ -63,15 +84,8 @@ char *mygetline(int fd) return buf; } } - - if(buf[0]) { - buf[i] = '\0'; - return buf; - } - - free(buf); - return NULL; } + #if 0 int main(int argc, char **argv) {