mirror of
https://github.com/curl/curl.git
synced 2026-04-12 12:21:42 +08:00
- codespell: break logic out into its own runnable script. Allowing to run it on local machines. - codespell: install via `pip`, bump to latest version. - codespell: show version number in CI log. - codespell: drop no longer needed word exception: `msdos`. - codespell: include all curl source tree, except `packages` and `winbuild`. Drop an obsolete file exclusion. - add new spellchecker job using the `typos` tool. It includes the codespell dictionary and a couple more. Use linuxbrew to install it. This takes 10 seconds, while installing via `cargo` from source would take over a minute. - codespell: introduce an inline ignore filter compatible with `cspell` Make `typos` recognize it, too. Move single exceptions inline. Fix new typos found. Also rename variables and words to keep spellchecking exceptions at minumum. This involves touching some tests. Also switch base64 strings to `%b64[]` to avoid false positives. Ref: https://github.com/crate-ci/typos/blob/master/docs/reference.md Ref: https://github.com/codespell-project/codespell?tab=readme-ov-file#inline-ignore Ref: https://github.com/codespell-project/codespell/issues/1212#issuecomment-1721152455 Ref: https://cspell.org/docs/Configuration/document-settings Closes #17905
127 lines
3.8 KiB
C
127 lines
3.8 KiB
C
/***************************************************************************
|
|
* _ _ ____ _
|
|
* Project ___| | | | _ \| |
|
|
* / __| | | | |_) | |
|
|
* | (__| |_| | _ <| |___
|
|
* \___|\___/|_| \_\_____|
|
|
*
|
|
* Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
*
|
|
* This software is licensed as described in the file COPYING, which
|
|
* you should have received as part of this distribution. The terms
|
|
* are also available at https://curl.se/docs/copyright.html.
|
|
*
|
|
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
* copies of the Software, and permit persons to whom the Software is
|
|
* furnished to do so, under the terms of the COPYING file.
|
|
*
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
* KIND, either express or implied.
|
|
*
|
|
* SPDX-License-Identifier: curl
|
|
*
|
|
***************************************************************************/
|
|
/* <DESC>
|
|
* FTP upload a file from memory
|
|
* </DESC>
|
|
*/
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <curl/curl.h>
|
|
|
|
static const char data[]=
|
|
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
|
|
"___ rhoncus odio id venenatis volutpat. Vestibulum dapibus "
|
|
"bibendum ullamcorper. Maecenas finibus elit augue, vel "
|
|
"condimentum odio maximus nec. In hac habitasse platea dictumst. "
|
|
"Vestibulum vel dolor et turpis rutrum finibus ac at nulla. "
|
|
"Vivamus nec neque ac elit blandit pretium vitae maximus ipsum. "
|
|
"Quisque sodales magna vel erat auctor, sed pellentesque nisi "
|
|
"rhoncus. Donec vehicula maximus pretium. Aliquam eu tincidunt "
|
|
"lorem.";
|
|
|
|
struct WriteThis {
|
|
const char *readptr;
|
|
size_t sizeleft;
|
|
};
|
|
|
|
static size_t read_callback(char *ptr, size_t size, size_t nmemb, void *userp)
|
|
{
|
|
struct WriteThis *upload = (struct WriteThis *)userp;
|
|
size_t max = size*nmemb;
|
|
|
|
if(max < 1)
|
|
return 0;
|
|
|
|
if(upload->sizeleft) {
|
|
size_t copylen = max;
|
|
if(copylen > upload->sizeleft)
|
|
copylen = upload->sizeleft;
|
|
memcpy(ptr, upload->readptr, copylen);
|
|
upload->readptr += copylen;
|
|
upload->sizeleft -= copylen;
|
|
return copylen;
|
|
}
|
|
|
|
return 0; /* no more data left to deliver */
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
CURL *curl;
|
|
CURLcode res;
|
|
|
|
struct WriteThis upload;
|
|
|
|
upload.readptr = data;
|
|
upload.sizeleft = strlen(data);
|
|
|
|
/* In Windows, this inits the Winsock stuff */
|
|
res = curl_global_init(CURL_GLOBAL_DEFAULT);
|
|
/* Check for errors */
|
|
if(res != CURLE_OK) {
|
|
fprintf(stderr, "curl_global_init() failed: %s\n",
|
|
curl_easy_strerror(res));
|
|
return 1;
|
|
}
|
|
|
|
/* get a curl handle */
|
|
curl = curl_easy_init();
|
|
if(curl) {
|
|
/* First set the URL, the target file */
|
|
curl_easy_setopt(curl, CURLOPT_URL,
|
|
"ftp://example.com/path/to/upload/file");
|
|
|
|
/* User and password for the FTP login */
|
|
curl_easy_setopt(curl, CURLOPT_USERPWD, "login:secret");
|
|
|
|
/* Now specify we want to UPLOAD data */
|
|
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
|
|
|
|
/* we want to use our own read function */
|
|
curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
|
|
|
|
/* pointer to pass to our read function */
|
|
curl_easy_setopt(curl, CURLOPT_READDATA, &upload);
|
|
|
|
/* get verbose debug output please */
|
|
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
|
|
|
|
/* Set the expected upload size. */
|
|
curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE,
|
|
(curl_off_t)upload.sizeleft);
|
|
|
|
/* Perform the request, res gets the return code */
|
|
res = curl_easy_perform(curl);
|
|
/* Check for errors */
|
|
if(res != CURLE_OK)
|
|
fprintf(stderr, "curl_easy_perform() failed: %s\n",
|
|
curl_easy_strerror(res));
|
|
|
|
/* always cleanup */
|
|
curl_easy_cleanup(curl);
|
|
}
|
|
curl_global_cleanup();
|
|
return 0;
|
|
}
|