diff options
Diffstat (limited to 'docs/FAQ')
| -rw-r--r-- | docs/FAQ | 37 | 
1 files changed, 36 insertions, 1 deletions
@@ -1,4 +1,4 @@ -Updated: October 27, 2000 (http://curl.haxx.se/docs/faq.shtml) +Updated: November 22, 2000 (http://curl.haxx.se/docs/faq.shtml)                                    _   _ ____  _                                     ___| | | |  _ \| |                                   / __| | | | |_) | |     @@ -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? @@ -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  | 
