summaryrefslogtreecommitdiff
path: root/libc/stdio
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2015-12-06 18:05:32 +0100
committerWaldemar Brodkorb <wbx@openadk.org>2015-12-09 07:50:59 +0100
commit5a233790c38323afaed5ede000e1ef1234755ad7 (patch)
treef674e420e0871491e1dad7bf584226fffdfaf5d1 /libc/stdio
parentb6af57f98021bc3b1b8183cfb501a5c45293cdd7 (diff)
Reduce the initial buffer size for open_memstream
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. Problem appears in case of UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y, see http://dev.openwrt.org/ticket/13024 Signed-off-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: Leonid Lisovskiy <lly.dev@gmail.com> Signed-off-by: Waldemar Brodkorb <wbx@uclibc-ng.org>
Diffstat (limited to 'libc/stdio')
-rw-r--r--libc/stdio/open_memstream.c4
-rw-r--r--libc/stdio/vasprintf.c2
2 files changed, 5 insertions, 1 deletions
diff --git a/libc/stdio/open_memstream.c b/libc/stdio/open_memstream.c
index 5400fe441..17ef191cb 100644
--- 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 **bufloc, size_t *sizeloc)
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. */
diff --git a/libc/stdio/vasprintf.c b/libc/stdio/vasprintf.c
index a901ee815..fa7926c60 100644
--- a/libc/stdio/vasprintf.c
+++ b/libc/stdio/vasprintf.c
@@ -39,6 +39,8 @@ int vasprintf(char **__restrict buf, const char * __restrict format,
if (rv < 0) {
free(*buf);
*buf = NULL;
+ } else {
+ *buf = realloc(*buf, rv + 1);
}
}