]> git.ipfire.org Git - thirdparty/mlmmj.git/commitdiff
mygetline EINTR handling and errno = 0
authormmj <none@none>
Wed, 2 Jun 2004 21:50:40 +0000 (07:50 +1000)
committermmj <none@none>
Wed, 2 Jun 2004 21:50:40 +0000 (07:50 +1000)
src/mail-functions.c
src/mygetline.c

index cdfc1c538215a1e78b37b3469f370380a2dd4f65..8b0e25b0f525a8bf7621abe7f5ece8acf33a2630 100644 (file)
@@ -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;
index f09d0054be08c121842ecfac36f867d5450dfea6..356e190cd3c7001d58d8559423e5feeea211d578 100644 (file)
@@ -11,6 +11,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <errno.h>
 #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)
 {