]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
CURLOPT_WRITEFUNCTION.3: fix memory leak in example
authorThomas1664 <46387399+Thomas1664@users.noreply.github.com>
Wed, 1 Feb 2023 12:59:25 +0000 (13:59 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Fri, 3 Feb 2023 09:02:47 +0000 (10:02 +0100)
Closes #10390

docs/libcurl/opts/CURLOPT_WRITEFUNCTION.3

index c947f76bb188b69b20e8c7dfbde3bcf505b02159..70bc14bf3bc5d110d19e849847b18055f0009263 100644 (file)
@@ -80,35 +80,48 @@ libcurl will use 'fwrite' as a callback by default.
 For all protocols
 .SH EXAMPLE
 .nf
- struct memory {
-   char *response;
-   size_t size;
- };
+struct memory {
+  char *response;
+  size_t size;
+};
 
- static size_t cb(void *data, size_t size, size_t nmemb, void *userp)
- {
-   size_t realsize = size * nmemb;
-   struct memory *mem = (struct memory *)userp;
+static size_t cb(void *data, size_t size, size_t nmemb, void *userp)
+{
+  size_t realsize = size * nmemb;
+  struct memory *mem = (struct memory *)userp;
 
-   char *ptr = realloc(mem->response, mem->size + realsize + 1);
-   if(ptr == NULL)
-     return 0;  /* out of memory! */
+  char *ptr = realloc(mem->response, mem->size + realsize + 1);
+  if(ptr == NULL)
+    return 0;  /* out of memory! */
 
-   mem->response = ptr;
-   memcpy(&(mem->response[mem->size]), data, realsize);
-   mem->size += realsize;
-   mem->response[mem->size] = 0;
+  mem->response = ptr;
+  memcpy(&(mem->response[mem->size]), data, realsize);
+  mem->size += realsize;
+  mem->response[mem->size] = 0;
 
-   return realsize;
- }
+  return realsize;
+}
 
- struct memory chunk = {0};
+struct memory chunk = {0};
+CURLcode res;
+CURL *curl_handle = curl_easy_init();
 
- /* send all data to this function  */
- curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, cb);
+if (curl_handle)
+{
+  /* send all data to this function  */
+  curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, cb);
 
- /* we pass our 'chunk' struct to the callback function */
- curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
+  /* we pass our 'chunk' struct to the callback function */
+  curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
+
+  /* send a request */
+  res = curl_easy_perform(curl_handle);
+
+  /* remember to free the buffer */
+  free(chunk.response)
+
+  curl_easy_cleanup(curl_handle);
+}
 .fi
 .SH AVAILABILITY
 Support for the CURL_WRITEFUNC_PAUSE return code was added in version 7.18.0.