read-file: Don't occupy too much unused memory.
[pspp] / lib / read-file.c
index 27241b450483bffb08ae9e69eaaf37903b439e49..0a15c5a4574fc2ca8039880689c5f3fa42d92ebd 100644 (file)
@@ -119,6 +119,15 @@ fread_file (FILE * stream, size_t * length)
             save_errno = errno;
             if (ferror (stream))
               break;
+
+            /* Shrink the allocated memory if possible.  */
+            if (size + 1 < alloc)
+              {
+                char *smaller_buf = realloc (buf, size + 1);
+                if (smaller_buf != NULL)
+                  buf = smaller_buf;
+              }
+
             buf[size] = '\0';
             *length = size;
             return buf;