obstack.m4 (gl_PREREQ_OBSTACK): Require
[gnulib.git] / lib / linebuffer.c
index 434d6d8..67d0f1f 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <sys/types.h>
 #include "linebuffer.h"
 #include "unlocked-io.h"
@@ -35,9 +36,7 @@
 void
 initbuffer (struct linebuffer *linebuffer)
 {
-  linebuffer->length = 0;
-  linebuffer->size = 200;
-  linebuffer->buffer = xmalloc (linebuffer->size);
+  memset (linebuffer, 0, sizeof *linebuffer);
 }
 
 /* Read an arbitrarily long line of text from STREAM into LINEBUFFER.
@@ -73,9 +72,9 @@ readlinebuffer (struct linebuffer *linebuffer, FILE *stream)
        }
       if (p == end)
        {
-         linebuffer->size *= 2;
-         buffer = xrealloc (buffer, linebuffer->size);
-         p = p - linebuffer->buffer + buffer;
+         size_t oldsize = linebuffer->size;
+         buffer = x2realloc (buffer, &linebuffer->size);
+         p = buffer + oldsize;
          linebuffer->buffer = buffer;
          end = buffer + linebuffer->size;
        }
@@ -87,11 +86,10 @@ readlinebuffer (struct linebuffer *linebuffer, FILE *stream)
   return linebuffer;
 }
 
-/* Free linebuffer LINEBUFFER and its data, all allocated with malloc. */
+/* Free the buffer that was allocated for linebuffer LINEBUFFER.  */
 
 void
 freebuffer (struct linebuffer *linebuffer)
 {
   free (linebuffer->buffer);
-  free (linebuffer);
 }