CURLOPT_CHUNK_DATA.md (2058B)
1 --- 2 c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al. 3 SPDX-License-Identifier: curl 4 Title: CURLOPT_CHUNK_DATA 5 Section: 3 6 Source: libcurl 7 See-also: 8 - CURLOPT_CHUNK_BGN_FUNCTION (3) 9 - CURLOPT_WILDCARDMATCH (3) 10 Protocol: 11 - FTP 12 Added-in: 7.21.0 13 --- 14 15 # NAME 16 17 CURLOPT_CHUNK_DATA - pointer passed to the FTP chunk callbacks 18 19 # SYNOPSIS 20 21 ~~~c 22 #include <curl/curl.h> 23 24 CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CHUNK_DATA, void *pointer); 25 ~~~ 26 27 # DESCRIPTION 28 29 Pass a *pointer* that is untouched by libcurl and passed as the ptr 30 argument to the CURLOPT_CHUNK_BGN_FUNCTION(3) and 31 CURLOPT_CHUNK_END_FUNCTION(3). 32 33 # DEFAULT 34 35 NULL 36 37 # %PROTOCOLS% 38 39 # EXAMPLE 40 41 ~~~c 42 #include <stdio.h> 43 44 struct callback_data { 45 FILE *output; 46 }; 47 48 static long file_is_coming(struct curl_fileinfo *finfo, 49 void *ptr, 50 int remains) 51 { 52 struct callback_data *data = ptr; 53 printf("%3d %40s %10luB ", remains, finfo->filename, 54 (unsigned long)finfo->size); 55 56 switch(finfo->filetype) { 57 case CURLFILETYPE_DIRECTORY: 58 printf(" DIR\n"); 59 break; 60 case CURLFILETYPE_FILE: 61 printf("FILE "); 62 break; 63 default: 64 printf("OTHER\n"); 65 break; 66 } 67 68 if(finfo->filetype == CURLFILETYPE_FILE) { 69 /* do not transfer files >= 50B */ 70 if(finfo->size > 50) { 71 printf("SKIPPED\n"); 72 return CURL_CHUNK_BGN_FUNC_SKIP; 73 } 74 75 data->output = fopen(finfo->filename, "wb"); 76 if(!data->output) { 77 return CURL_CHUNK_BGN_FUNC_FAIL; 78 } 79 } 80 81 return CURL_CHUNK_BGN_FUNC_OK; 82 } 83 84 int main() 85 { 86 /* data for callback */ 87 struct callback_data callback_info; 88 89 CURL *curl = curl_easy_init(); 90 91 /* callback is called before download of concrete file started */ 92 curl_easy_setopt(curl, CURLOPT_CHUNK_BGN_FUNCTION, file_is_coming); 93 curl_easy_setopt(curl, CURLOPT_CHUNK_DATA, &callback_info); 94 } 95 ~~~ 96 97 # %AVAILABILITY% 98 99 # RETURN VALUE 100 101 curl_easy_setopt(3) returns a CURLcode indicating success or error. 102 103 CURLE_OK (0) means everything was OK, non-zero means an error occurred, see 104 libcurl-errors(3).