Loading docs/FAQ +36 −1 Original line number Diff line number Diff line Updated: October 27, 2000 (http://curl.haxx.se/docs/faq.shtml) Updated: November 22, 2000 (http://curl.haxx.se/docs/faq.shtml) _ _ ____ _ ___| | | | _ \| | / __| | | | |_) | | Loading Loading @@ -48,6 +48,7 @@ FAQ 5. libcurl Issues 5.1 Is libcurl thread safe? 5.2 How can I receive all data into a large memory chunk? 6. License Issues 6.1 I have a GPL program, can I use the libcurl library? Loading Loading @@ -402,6 +403,40 @@ FAQ README file from those who have used libcurl in a threaded environment, since I haven't and I get this question more and more frequently! 5.2 How can I receive all data into a large memory chunk? You are in full control of the callback function that gets called every time there is data received from the remote server. You can make that callback do whatever you want. You do not have to write the receivied data to a file. One solution to this problem could be to have a pointer to a struct that you pass to the callback function. You set the pointer using the curl_easy_setopt(CURLOPT_FILE) function. Then that pointer will be passed to the callback instead of a FILE * to a file: /* imaginary struct */ struct MemoryStruct { char *memory; size_t size; }; /* imaginary callback function */ size_t WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data) { register int realsize = size * nmemb; struct MemoryStruct *mem = (struct MemoryStruct *)data; mem->memory = (char *)realloc(mem->memory, mem->size + realsize + 1); if (mem->memory) { memcpy(&(mem->memory[mem->size]), ptr, realsize); mem->size += realsize; mem->memory[mem->size] = 0; } return realsize; } 6. License Issues Curl and libcurl are released under the MPL, the Mozilla Public License. To Loading Loading
docs/FAQ +36 −1 Original line number Diff line number Diff line Updated: October 27, 2000 (http://curl.haxx.se/docs/faq.shtml) Updated: November 22, 2000 (http://curl.haxx.se/docs/faq.shtml) _ _ ____ _ ___| | | | _ \| | / __| | | | |_) | | Loading Loading @@ -48,6 +48,7 @@ FAQ 5. libcurl Issues 5.1 Is libcurl thread safe? 5.2 How can I receive all data into a large memory chunk? 6. License Issues 6.1 I have a GPL program, can I use the libcurl library? Loading Loading @@ -402,6 +403,40 @@ FAQ README file from those who have used libcurl in a threaded environment, since I haven't and I get this question more and more frequently! 5.2 How can I receive all data into a large memory chunk? You are in full control of the callback function that gets called every time there is data received from the remote server. You can make that callback do whatever you want. You do not have to write the receivied data to a file. One solution to this problem could be to have a pointer to a struct that you pass to the callback function. You set the pointer using the curl_easy_setopt(CURLOPT_FILE) function. Then that pointer will be passed to the callback instead of a FILE * to a file: /* imaginary struct */ struct MemoryStruct { char *memory; size_t size; }; /* imaginary callback function */ size_t WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data) { register int realsize = size * nmemb; struct MemoryStruct *mem = (struct MemoryStruct *)data; mem->memory = (char *)realloc(mem->memory, mem->size + realsize + 1); if (mem->memory) { memcpy(&(mem->memory[mem->size]), ptr, realsize); mem->size += realsize; mem->memory[mem->size] = 0; } return realsize; } 6. License Issues Curl and libcurl are released under the MPL, the Mozilla Public License. To Loading