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