uClibc: add a patch to reduce vasprintf allocation size (fixes #13024)
authorFelix Fietkau <nbd@openwrt.org>
Sat, 17 May 2014 17:36:08 +0000 (17:36 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Sat, 17 May 2014 17:36:08 +0000 (17:36 +0000)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
SVN-Revision: 40774

toolchain/uClibc/patches-0.9.33.2/150-vasprintf_size_reduce.patch [new file with mode: 0644]

diff --git a/toolchain/uClibc/patches-0.9.33.2/150-vasprintf_size_reduce.patch b/toolchain/uClibc/patches-0.9.33.2/150-vasprintf_size_reduce.patch
new file mode 100644 (file)
index 0000000..7853c1a
--- /dev/null
@@ -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 <nbd@openwrt.org>
+
+--- 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. */