|
@@ -0,0 +1,37 @@
|
|
|
+Reduce the initial buffer size for open_memstream (used by vasprintf),
|
|
|
+as most strings are usually smaller than that.
|
|
|
+Realloc the buffer after finishing the string to further reduce size.
|
|
|
+
|
|
|
+Signed-off-by: Felix Fietkau <[email protected]>
|
|
|
+
|
|
|
+--- a/libc/stdio/vasprintf.c
|
|
|
++++ b/libc/stdio/vasprintf.c
|
|
|
+@@ -39,6 +39,8 @@ int vasprintf(char **__restrict buf, con
|
|
|
+ if (rv < 0) {
|
|
|
+ free(*buf);
|
|
|
+ *buf = NULL;
|
|
|
++ } else {
|
|
|
++ *buf = realloc(*buf, rv + 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+--- a/libc/stdio/open_memstream.c
|
|
|
++++ b/libc/stdio/open_memstream.c
|
|
|
+@@ -17,6 +17,8 @@
|
|
|
+
|
|
|
+ #define COOKIE ((__oms_cookie *) cookie)
|
|
|
+
|
|
|
++#define MEMSTREAM_BUFSIZ 256
|
|
|
++
|
|
|
+ typedef struct {
|
|
|
+ char *buf;
|
|
|
+ size_t len;
|
|
|
+@@ -134,7 +136,7 @@ FILE *open_memstream(char **__restrict b
|
|
|
+ register FILE *fp;
|
|
|
+
|
|
|
+ if ((cookie = malloc(sizeof(__oms_cookie))) != NULL) {
|
|
|
+- if ((cookie->buf = malloc(cookie->len = BUFSIZ)) == NULL) {
|
|
|
++ if ((cookie->buf = malloc(cookie->len = MEMSTREAM_BUFSIZ)) == NULL) {
|
|
|
+ goto EXIT_cookie;
|
|
|
+ }
|
|
|
+ *cookie->buf = 0; /* Set nul terminator for buffer. */
|