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