dep-curl/tests/libtest/lib668.c
Viktor Szakats e1450d8fda
tidy-up: use more static, sizeof(), char[], double-const
- make `const` data `static`, where missing and possible.
- replace `strlen()` on literal or const strings with `sizeof()`.
  While the latter is optimized by popular C compiler, e.g. MSVC only
  does it with `/O2`.
- replace magic numbers with `sizeof()`, where missing.
- introduce `CURL_CSTRLEN()` macro for `sizeof(char[]) - 1`.
- use `CURL_CSTRLEN()` macro.
- move `const` before integer types, where missing.
- replace `char *var` with `var[]`, where missing and possible.
- use double const, where missing.
  `static const char *` -> `static const char * const`.
- lib1514: constify pointers.
- unit3205: drop redundant cast, avoid another one.
- unit1666: map `OID()` macro to identical `STRCONST()`.

Closes #22406
2026-07-28 13:53:11 +02:00

115 lines
3.5 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
*
***************************************************************************/
#include "first.h"
struct t668_WriteThis {
const char *readptr;
size_t sizeleft;
};
static size_t t668_read_cb(char *ptr, size_t size, size_t nmemb, void *userp)
{
struct t668_WriteThis *pooh = (struct t668_WriteThis *)userp;
size_t len = pooh->sizeleft;
(void)size; /* Always 1 */
if(len > nmemb)
len = nmemb;
if(len) {
memcpy(ptr, pooh->readptr, len);
pooh->readptr += len;
pooh->sizeleft -= len;
}
return len;
}
static CURLcode test_lib668(const char *URL)
{
static const char testdata[] = "dummy";
CURL *curl = NULL;
curl_mime *mime = NULL;
curl_mimepart *part;
CURLcode result = TEST_ERR_FAILURE;
struct t668_WriteThis pooh1, pooh2;
/*
* Check early end of part data detection.
*/
if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
curl_mfprintf(stderr, "curl_global_init() failed\n");
return TEST_ERR_MAJOR_BAD;
}
curl = curl_easy_init();
/* First set the URL that is about to receive our POST. */
easy_setopt(curl, CURLOPT_URL, URL);
/* get verbose debug output please */
easy_setopt(curl, CURLOPT_VERBOSE, 1L);
/* include headers in the output */
easy_setopt(curl, CURLOPT_HEADER, 1L);
/* Prepare the callback structures. */
pooh1.readptr = testdata;
pooh1.sizeleft = CURL_CSTRLEN(testdata);
pooh2 = pooh1;
/* Build the mime tree. */
mime = curl_mime_init(curl);
part = curl_mime_addpart(mime);
curl_mime_name(part, "field1");
/* Early end of data detection can be done because the data size is known. */
curl_mime_data_cb(part, (curl_off_t)pooh1.sizeleft,
t668_read_cb, NULL, NULL, &pooh1);
part = curl_mime_addpart(mime);
curl_mime_name(part, "field2");
/* Using an undefined length forces chunked transfer and disables early
end of data detection for this part. */
curl_mime_data_cb(part, (curl_off_t)-1, t668_read_cb, NULL, NULL, &pooh2);
part = curl_mime_addpart(mime);
curl_mime_name(part, "field3");
/* For regular file parts, early end of data can be detected because
the file size is known. In addition, an EOF test is performed. */
curl_mime_filedata(part, libtest_arg2);
/* Bind mime data to its easy handle. */
easy_setopt(curl, CURLOPT_MIMEPOST, mime);
/* Send data. */
result = curl_easy_perform(curl);
if(result != CURLE_OK) {
curl_mfprintf(stderr, "curl_easy_perform() failed\n");
}
test_cleanup:
curl_easy_cleanup(curl);
curl_mime_free(mime);
curl_global_cleanup();
return result;
}