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