RELEASE-NOTES: two more bug fixes
[platform/upstream/c-ares.git] / ares__read_line.c
index d198b12..bd9504f 100644 (file)
@@ -1,4 +1,3 @@
-/* $Id$ */
 
 /* Copyright 1998 by the Massachusetts Institute of Technology.
  *
  * without express or implied warranty.
  */
 
-#include "setup.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
+#include "ares_setup.h"
+
 #include "ares.h"
+#include "ares_nowarn.h"
 #include "ares_private.h"
 
 /* This is an internal function.  Its contract is to read a line from
@@ -44,9 +42,11 @@ int ares__read_line(FILE *fp, char **buf, size_t *bufsize)
       *bufsize = 128;
     }
 
-  while (1)
+  for (;;)
     {
-      if (!fgets(*buf + offset, (int)(*bufsize - offset), fp))
+      int bytestoread = aresx_uztosi(*bufsize - offset);
+
+      if (!fgets(*buf + offset, bytestoread, fp))
         return (offset != 0) ? 0 : (ferror(fp)) ? ARES_EFILE : ARES_EOF;
       len = offset + strlen(*buf + offset);
       if ((*buf)[len - 1] == '\n')
@@ -55,6 +55,8 @@ int ares__read_line(FILE *fp, char **buf, size_t *bufsize)
           break;
         }
       offset = len;
+      if(len < *bufsize - 1)
+        continue;
 
       /* Allocate more space. */
       newbuf = realloc(*buf, *bufsize * 2);