[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnurl] 133/411: curl: make file2memory use dynbuf
From: |
gnunet |
Subject: |
[gnurl] 133/411: curl: make file2memory use dynbuf |
Date: |
Wed, 13 Jan 2021 01:19:08 +0100 |
This is an automated email from the git hooks/post-receive script.
nikita pushed a commit to branch master
in repository gnurl.
commit 893bbd745821bf71c8e6c92ad017365cf82b3514
Author: Daniel Stenberg <daniel@haxx.se>
AuthorDate: Fri Sep 11 10:54:35 2020 +0200
curl: make file2memory use dynbuf
Closes #5952
---
src/tool_paramhlp.c | 52 ++++++++++++++--------------------------------------
1 file changed, 14 insertions(+), 38 deletions(-)
diff --git a/src/tool_paramhlp.c b/src/tool_paramhlp.c
index f60d4f957..84d7321bf 100644
--- a/src/tool_paramhlp.c
+++ b/src/tool_paramhlp.c
@@ -81,52 +81,28 @@ ParameterError file2string(char **bufp, FILE *file)
return PARAM_OK;
}
+#define MAX_FILE2MEMORY (1024*1024*1024) /* big enough ? */
+
ParameterError file2memory(char **bufp, size_t *size, FILE *file)
{
- char *newbuf;
- char *buffer = NULL;
- size_t nused = 0;
-
if(file) {
size_t nread;
- size_t alloc = 512;
+ struct curlx_dynbuf dyn;
+ curlx_dyn_init(&dyn, MAX_FILE2MEMORY);
do {
- if(!buffer || (alloc == nused)) {
- /* size_t overflow detection and avoiding huge files */
- if(alloc >= (SIZE_T_MAX/4)) {
- Curl_safefree(buffer);
- return PARAM_NO_MEM;
- }
- alloc *= 2;
- /* allocate an extra char, reserved space, for null termination */
- newbuf = realloc(buffer, alloc + 1);
- if(!newbuf) {
- Curl_safefree(buffer);
+ char buffer[4096];
+ nread = fread(buffer, 1, sizeof(buffer), file);
+ if(nread)
+ if(curlx_dyn_addn(&dyn, buffer, nread))
return PARAM_NO_MEM;
- }
- buffer = newbuf;
- }
- nread = fread(buffer + nused, 1, alloc-nused, file);
- nused += nread;
} while(nread);
- /* null terminate the buffer in case it's used as a string later */
- buffer[nused] = '\0';
- /* free trailing slack space, if possible */
- if(alloc != nused) {
- newbuf = realloc(buffer, nused + 1);
- if(!newbuf) {
- Curl_safefree(buffer);
- return PARAM_NO_MEM;
- }
- buffer = newbuf;
- }
- /* discard buffer if nothing was read */
- if(!nused) {
- Curl_safefree(buffer); /* no string */
- }
+ *size = curlx_dyn_len(&dyn);
+ *bufp = curlx_dyn_ptr(&dyn);
+ }
+ else {
+ *size = 0;
+ *bufp = NULL;
}
- *size = nused;
- *bufp = buffer;
return PARAM_OK;
}
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [gnurl] 162/411: docs/TheArtOfHttpScripting: convert to markdown, (continued)
- [gnurl] 162/411: docs/TheArtOfHttpScripting: convert to markdown, gnunet, 2021/01/12
- [gnurl] 149/411: multi: reuse WinSock events variable in Curl_multi_wait, gnunet, 2021/01/12
- [gnurl] 148/411: TODO: dynamically decide to use socketpair, gnunet, 2021/01/12
- [gnurl] 139/411: tool_writeout: add new writeout variable, %{num_headers}, gnunet, 2021/01/12
- [gnurl] 182/411: ftp: separate FTPS from FTP over "HTTPS proxy", gnunet, 2021/01/12
- [gnurl] 197/411: configure: use "no" instead of "disabled" for the end summary, gnunet, 2021/01/12
- [gnurl] 232/411: CI/tests: use verification curl for test reporting APIs, gnunet, 2021/01/12
- [gnurl] 233/411: strerror: Revert to local codepage for Windows error string, gnunet, 2021/01/12
- [gnurl] 226/411: mbedtls: add missing header when defining MBEDTLS_DEBUG, gnunet, 2021/01/12
- [gnurl] 159/411: CHECKSRC: document two missing warnings, gnunet, 2021/01/12
- [gnurl] 133/411: curl: make file2memory use dynbuf,
gnunet <=
- [gnurl] 154/411: man pages: switch to https://example.com URLs, gnunet, 2021/01/12
- [gnurl] 259/411: packages/OS400: make the source code-style compliant, gnunet, 2021/01/12
- [gnurl] 241/411: src/tool_filetime: disable -Wformat on mingw for this file, gnunet, 2021/01/12
- [gnurl] 132/411: curl: make file2string use dynbuf, gnunet, 2021/01/12
- [gnurl] 180/411: pingpong: use a dynbuf for the *_pp_sendf() function, gnunet, 2021/01/12
- [gnurl] 143/411: test3015: verify stdout "as text", gnunet, 2021/01/12
- [gnurl] 150/411: multi: align WinSock mask variables in Curl_multi_wait, gnunet, 2021/01/12
- [gnurl] 145/411: CI/azure: disable test 571 in the msys2 builds, gnunet, 2021/01/12
- [gnurl] 163/411: docs/RESOURCES: remove, gnunet, 2021/01/12
- [gnurl] 169/411: krb5: merged security.c and krb specific FTP functions in here, gnunet, 2021/01/12