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