frame->hd.flags & NGHTTP2_FLAG_ACK);
case NGHTTP2_GOAWAY: {
char scratch[128];
- size_t s_len = sizeof(scratch)/sizeof(scratch[0]);
+ size_t s_len = CURL_ARRAYSIZE(scratch);
size_t len = (frame->goaway.opaque_data_len < s_len) ?
frame->goaway.opaque_data_len : s_len-1;
if(len)
static bool h2_non_field(const char *name, size_t namelen)
{
size_t i;
- for(i = 0; i < sizeof(H2_NON_FIELD)/sizeof(H2_NON_FIELD[0]); ++i) {
+ for(i = 0; i < CURL_ARRAYSIZE(H2_NON_FIELD); ++i) {
if(namelen < H2_NON_FIELD[i].namelen)
return FALSE;
if(namelen == H2_NON_FIELD[i].namelen &&
}
case NGHTTP2_GOAWAY: {
char scratch[128];
- size_t s_len = sizeof(scratch)/sizeof(scratch[0]);
+ size_t s_len = CURL_ARRAYSIZE(scratch);
size_t len = (frame->goaway.opaque_data_len < s_len) ?
frame->goaway.opaque_data_len : s_len-1;
if(len)
const char *nameend = filename + len1;
unsigned int i;
- for(i = 0; i < sizeof(ctts) / sizeof(ctts[0]); i++) {
+ for(i = 0; i < CURL_ARRAYSIZE(ctts); i++) {
size_t len2 = strlen(ctts[i].extension);
if(len1 >= len2 && strcasecompare(nameend - len2, ctts[i].extension))
result = rc == LDAP_URL_ERR_MEM ? CURLE_OUT_OF_MEMORY :
CURLE_URL_MALFORMAT;
rc -= LDAP_URL_SUCCESS;
- if((size_t) rc < sizeof(url_errs) / sizeof(url_errs[0]))
+ if((size_t) rc < CURL_ARRAYSIZE(url_errs))
msg = url_errs[rc];
failf(data, "LDAP local: %s", msg);
}
if(len > 4) /* longer than any valid timezone */
return -1;
- for(i = 0; i < sizeof(tz)/sizeof(tz[0]); i++) {
+ for(i = 0; i < CURL_ARRAYSIZE(tz); i++) {
size_t ilen = strlen(what->name);
if((ilen == len) &&
strncasecompare(check, what->name, len))
FormatMessageW -> wcstombs is used for Windows CE compatibility. */
if(FormatMessageW((FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS), NULL, (DWORD)err,
- LANG_NEUTRAL, wbuf, sizeof(wbuf)/sizeof(wchar_t), NULL)) {
+ LANG_NEUTRAL, wbuf, CURL_ARRAYSIZE(wbuf), NULL)) {
size_t written = wcstombs(buf, wbuf, buflen - 1);
if(written != (size_t)-1)
buf[written] = '\0';
if(ctx->h3conn && ngtcp2_conn_get_max_data_left(ctx->qconn)) {
veccnt = nghttp3_conn_writev_stream(ctx->h3conn, &stream_id, &fin, vec,
- sizeof(vec) / sizeof(vec[0]));
+ CURL_ARRAYSIZE(vec));
if(veccnt < 0) {
failf(x->data, "nghttp3_conn_writev_stream returned error: %s",
nghttp3_strerror((int)veccnt));
};
/* a precaution to make sure the lists are in sync */
- DEBUGASSERT(sizeof(names)/sizeof(names[0]) == SSH_LAST);
+ DEBUGASSERT(CURL_ARRAYSIZE(names) == SSH_LAST);
if(sshc->state != nowstate) {
infof(data, "SFTP %p state change from %s to %s",
};
/* a precaution to make sure the lists are in sync */
- DEBUGASSERT(sizeof(names)/sizeof(names[0]) == SSH_LAST);
+ DEBUGASSERT(CURL_ARRAYSIZE(names) == SSH_LAST);
if(sshc->state != nowstate) {
infof(data, "wolfssh %p state change from %s to %s",
BR_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, /* 0xCCA9 */
};
-#define NUM_OF_CIPHERS (sizeof(ciphertable) / sizeof(ciphertable[0]))
+#define NUM_OF_CIPHERS CURL_ARRAYSIZE(ciphertable)
static CURLcode bearssl_set_selected_ciphers(struct Curl_easy *data,
br_ssl_engine_context *ssl_eng,
CS_ENTRY(0xCCAE, RSA,PSK,CHACHA20,POLY1305,,,,),
#endif
};
-#define CS_LIST_LEN (sizeof(cs_list) / sizeof(cs_list[0]))
+#define CS_LIST_LEN CURL_ARRAYSIZE(cs_list)
static int cs_str_to_zip(const char *cs_str, size_t cs_len,
uint8_t zip[6])
#endif /* CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11 */
};
-#define DEFAULT_CIPHERS_LEN sizeof(default_ciphers)/sizeof(default_ciphers[0])
-
-
/* pinned public key support tests */
/* version 1 supports macOS 10.12+ and iOS 10+ */
/* Intersect the ciphers supported by Secure Transport with the default
* ciphers, using the order of the former. */
for(i = 0; i < supported_len; i++) {
- for(j = 0; j < DEFAULT_CIPHERS_LEN; j++) {
+ for(j = 0; j < CURL_ARRAYSIZE(default_ciphers); j++) {
if(default_ciphers[j] == ciphers[i]) {
ciphers[count++] = ciphers[i];
break;
{
unsigned char opcode = proto_opcode & WSBIT_OPCODE_MASK;
size_t i;
- for(i = 0; i < sizeof(WS_FRAMES)/sizeof(WS_FRAMES[0]); ++i) {
+ for(i = 0; i < CURL_ARRAYSIZE(WS_FRAMES); ++i) {
if(WS_FRAMES[i].proto_opcode == opcode)
return WS_FRAMES[i].name;
}
{
unsigned char opcode = proto_opcode & WSBIT_OPCODE_MASK;
size_t i;
- for(i = 0; i < sizeof(WS_FRAMES)/sizeof(WS_FRAMES[0]); ++i) {
+ for(i = 0; i < CURL_ARRAYSIZE(WS_FRAMES); ++i) {
if(WS_FRAMES[i].proto_opcode == opcode)
return WS_FRAMES[i].flags;
}
static unsigned char ws_frame_flags2op(int flags)
{
size_t i;
- for(i = 0; i < sizeof(WS_FRAMES)/sizeof(WS_FRAMES[0]); ++i) {
+ for(i = 0; i < CURL_ARRAYSIZE(WS_FRAMES); ++i) {
if(WS_FRAMES[i].flags & flags)
return (unsigned char)WS_FRAMES[i].proto_opcode;
}
}
strcpy(keyval, randstr);
free(randstr);
- for(i = 0; !result && (i < sizeof(heads)/sizeof(heads[0])); i++) {
+ for(i = 0; !result && (i < CURL_ARRAYSIZE(heads)); i++) {
if(!Curl_checkheaders(data, STRCONST(heads[i].name))) {
result = Curl_dyn_addf(req, "%s %s\r\n", heads[i].name,
heads[i].val);
WCHAR prefix[3] = {0}; /* UTF-16 (1-2 WCHARs) + NUL */
if(MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)outs->utf8seq, -1,
- prefix, sizeof(prefix)/sizeof(prefix[0]))) {
+ prefix, CURL_ARRAYSIZE(prefix))) {
DEBUGASSERT(prefix[2] == L'\0');
if(!WriteConsoleW(
(HANDLE) fhnd,
if(!singles_done) {
unsigned int j;
- for(j = 0; j < sizeof(aliases)/sizeof(aliases[0]); j++) {
+ for(j = 0; j < CURL_ARRAYSIZE(aliases); j++) {
if(aliases[j].letter != ' ') {
unsigned char l = (unsigned char)aliases[j].letter;
singles[l - ' '] = &aliases[j];
struct LongShort key;
key.lname = opt;
- return bsearch(&key, aliases, sizeof(aliases)/sizeof(aliases[0]),
+ return bsearch(&key, aliases, CURL_ARRAYSIZE(aliases),
sizeof(aliases[0]), findarg);
}
const struct TOSEntry *entry;
find.name = nextarg;
entry = bsearch(&find, tos_entries,
- sizeof(tos_entries)/sizeof(*tos_entries),
+ CURL_ARRAYSIZE(tos_entries),
sizeof(*tos_entries), find_tos);
if(entry)
config->ip_tos = entry->value;
{NULL, NULL, 0}
};
-static const char *fnames[sizeof(maybe_feature) / sizeof(maybe_feature[0])];
+static const char *fnames[CURL_ARRAYSIZE(maybe_feature)];
const char * const *feature_names = fnames;
size_t feature_count;
size_t i = 0;
if(!str)
return PARAM_REQUIRES_PARAMETER;
- for(i = 0; i < sizeof(tls_max_array)/sizeof(tls_max_array[0]); i++) {
+ for(i = 0; i < CURL_ARRAYSIZE(tls_max_array); i++) {
if(!strcmp(str, tls_max_array[i].tls_max_str)) {
*val = tls_max_array[i].tls_max;
return PARAM_OK;
if(!curlx_dyn_addn(&name, ptr, vlen)) {
find.name = curlx_dyn_ptr(&name);
wv = bsearch(&find,
- variables, sizeof(variables)/sizeof(variables[0]),
+ variables, CURL_ARRAYSIZE(variables),
sizeof(variables[0]), matchvar);
}
if(wv) {
break;
case VAR_JSON:
ourWriteOutJSON(stream, variables,
- sizeof(variables)/sizeof(variables[0]),
+ CURL_ARRAYSIZE(variables),
per, per_result);
break;
case VAR_HEADER_JSON:
test_func = NULL;
{
size_t tmp;
- for(tmp = 0; tmp < (sizeof(s_tests)/sizeof((s_tests)[0])); ++tmp) {
+ for(tmp = 0; tmp < CURL_ARRAYSIZE(s_tests); ++tmp) {
if(strcmp(test_name, s_tests[tmp].name) == 0) {
test_func = s_tests[tmp].ptr;
break;
return TEST_ERR_MAJOR_BAD;
}
- for(i = 0; i < sizeof(testparams) / sizeof(testparams[0]); i++) {
+ for(i = 0; i < CURL_ARRAYSIZE(testparams); i++) {
curl = curl_easy_init();
if(!curl) {
fprintf(stderr, "curl_easy_init() failed\n");
/* The size of data should be kept below MAX_INITIAL_POST_SIZE! */
static char testdata[]="this is a short string.\n";
-static size_t data_size = sizeof(testdata) / sizeof(char);
+static size_t data_size = CURL_ARRAYSIZE(testdata);
static int progress_callback(void *clientp, double dltotal, double dlnow,
double ultotal, double ulnow)
testdata->progress.t_startop.tv_sec = BASE;
testdata->progress.t_startop.tv_usec = 0;
- for(i = 0; i < sizeof(run)/sizeof(run[0]); i++) {
+ for(i = 0; i < CURL_ARRAYSIZE(run); i++) {
timediff_t timeout;
NOW(run[i].now_s, run[i].now_us);
TIMEOUTS(run[i].timeout_ms, run[i].connecttimeout_ms);
UNITTEST_START
{
- int testnum = sizeof(tests) / sizeof(struct testcase);
int i;
enum system machine;
machine = SYSTEM_CUSTOM;
#endif
- for(i = 0; i < testnum; i++) {
+ for(i = 0; i < (int)CURL_ARRAYSIZE(tests); i++) {
int result = tests[i].result;
int rc = Curl_fnmatch(NULL, tests[i].pattern, tests[i].string);
if(result & (LINUX_DIFFER|MAC_DIFFER)) {
};
size_t i;
- for(i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) {
+ for(i = 0; i < CURL_ARRAYSIZE(tests); i++) {
timediff_t result = Curl_timediff(tests[i].first, tests[i].second);
if(result != tests[i].result) {
printf("%ld.%06u to %ld.%06u got %d, but expected %ld\n",
{ "/.", "/" },
};
- for(i = 0; i < sizeof(pairs)/sizeof(pairs[0]); i++) {
+ for(i = 0; i < CURL_ARRAYSIZE(pairs); i++) {
char *out;
int err = dedotdotify(pairs[i].input, strlen(pairs[i].input), &out);
abort_unless(err == 0, "returned error");
size_t i;
- for(i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
+ for(i = 0; i < CURL_ARRAYSIZE(data); ++i) {
char *output = NULL;
char *flagstr = NULL;
char *received_ccstr = NULL;
UNITTEST_START
{
int i;
- int testnum = sizeof(tests) / sizeof(struct testcase);
struct Curl_multi *multi = NULL;
struct Curl_easy *easy = NULL;
struct curl_slist *list = NULL;
- for(i = 0; i < testnum; ++i) {
+ for(i = 0; i < (int)CURL_ARRAYSIZE(tests); ++i) {
int j;
- int addressnum = sizeof(tests[i].address) / sizeof(*tests[i].address);
+ int addressnum = CURL_ARRAYSIZE(tests[i].address);
struct Curl_addrinfo *addr;
struct Curl_dns_entry *dns;
void *entry_id;
UNITTEST_START
{
int i;
- int testnum = sizeof(tests) / sizeof(struct testcase);
struct Curl_multi *multi = NULL;
struct Curl_easy *easy = NULL;
struct curl_slist *list = NULL;
and also clean cache after the loop. In contrast,for example,
test 1607 sets up and cleans cache on each iteration. */
- for(i = 0; i < testnum; ++i) {
+ for(i = 0; i < (int)CURL_ARRAYSIZE(tests); ++i) {
int j;
- int addressnum = sizeof (tests[i].address) / sizeof (*tests[i].address);
+ int addressnum = CURL_ARRAYSIZE(tests[i].address);
struct Curl_addrinfo *addr;
struct Curl_dns_entry *dns;
void *entry_id;
computed_hash = output_buf;
Curl_sha512_256it(output_buf, (const unsigned char *) test_str1,
- (sizeof(test_str1) / sizeof(char)) - 1);
+ CURL_ARRAYSIZE(test_str1) - 1);
verify_memory(computed_hash, precomp_hash1, CURL_SHA512_256_DIGEST_LENGTH);
Curl_sha512_256it(output_buf, (const unsigned char *) test_str2,
- (sizeof(test_str2) / sizeof(char)) - 1);
+ CURL_ARRAYSIZE(test_str2) - 1);
verify_memory(computed_hash, precomp_hash2, CURL_SHA512_256_DIGEST_LENGTH);
Curl_sha512_256it(output_buf, (const unsigned char *) test_str3,
- (sizeof(test_str3) / sizeof(char)) - 1);
+ CURL_ARRAYSIZE(test_str3) - 1);
verify_memory(computed_hash, precomp_hash3, CURL_SHA512_256_DIGEST_LENGTH);
Curl_sha512_256it(output_buf, (const unsigned char *) test_str4,
- (sizeof(test_str4) / sizeof(char)) - 1);
+ CURL_ARRAYSIZE(test_str4) - 1);
verify_memory(computed_hash, precomp_hash4, CURL_SHA512_256_DIGEST_LENGTH);
Curl_sha512_256it(output_buf, (const unsigned char *) test_str5,
- (sizeof(test_str5) / sizeof(char)) - 1);
+ CURL_ARRAYSIZE(test_str5) - 1);
verify_memory(computed_hash, precomp_hash5, CURL_SHA512_256_DIGEST_LENGTH);
Curl_sha512_256it(output_buf, (const unsigned char *) test_str6,
- (sizeof(test_str6) / sizeof(char)) - 1);
+ CURL_ARRAYSIZE(test_str6) - 1);
verify_memory(computed_hash, precomp_hash6, CURL_SHA512_256_DIGEST_LENGTH);
Curl_sha512_256it(output_buf, (const unsigned char *) test_str7,
- (sizeof(test_str7) / sizeof(char)) - 1);
+ CURL_ARRAYSIZE(test_str7) - 1);
verify_memory(computed_hash, precomp_hash7, CURL_SHA512_256_DIGEST_LENGTH);
Curl_sha512_256it(output_buf, test_seq8,
- sizeof(test_seq8) / sizeof(unsigned char));
+ CURL_ARRAYSIZE(test_seq8));
verify_memory(computed_hash, precomp_hash8, CURL_SHA512_256_DIGEST_LENGTH);
#endif /* CURL_HAVE_SHA512_256 */
size_t i;
unsigned char *p;
- for(i = 0; i < sizeof(req) / sizeof(req[0]); i++) {
+ for(i = 0; i < CURL_ARRAYSIZE(req); i++) {
DOHcode rc = doh_req_encode(req[i].name, req[i].type,
buffer, sizeof(buffer), &size);
if(rc != req[i].rc) {
}
}
- for(i = 0; i < sizeof(resp) / sizeof(resp[0]); i++) {
+ for(i = 0; i < CURL_ARRAYSIZE(resp); i++) {
struct dohentry d;
DOHcode rc;
char *ptr;
{ max, DOH_OK } /* expect buffer overwrite */
};
- for(i = 0; i < (int)(sizeof(playlist)/sizeof(*playlist)); i++) {
+ for(i = 0; i < (int)(CURL_ARRAYSIZE(playlist)); i++) {
const char *name = playlist[i].name;
size_t olen = 100000;
struct demo victim;
#if defined(USE_GNUTLS) || defined(USE_SCHANNEL) || defined(USE_SECTRANSP) || \
defined(USE_MBEDTLS)
-#ifndef ARRAYSIZE
-#define ARRAYSIZE(A) (sizeof(A)/sizeof((A)[0]))
-#endif
-
struct test1657_spec {
CURLcode (*setbuf)(struct test1657_spec *spec, struct dynbuf *buf);
size_t n;
return TEST_ERR_MAJOR_BAD;
}
- for(i = 0; i < ARRAYSIZE(test1657_specs); ++i) {
+ for(i = 0; i < CURL_ARRAYSIZE(test1657_specs); ++i) {
if(!do_test1657(&test1657_specs[i], i, &dbuf))
all_ok = FALSE;
}
size_t i;
- for(i = 0; i < sizeof(TEST_CASES)/sizeof(TEST_CASES[0]); ++i) {
+ for(i = 0; i < CURL_ARRAYSIZE(TEST_CASES); ++i) {
test_connect(&TEST_CASES[i]);
}
"RSA-PSK-CHACHA20-POLY1305" },
#endif
};
-#define TEST_CS_LIST_LEN (sizeof(test_cs_list) / sizeof(test_cs_list[0]))
static const char *cs_test_string =
"TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:"
{ 0x0000, "GIBBERISH" },
{ 0x0000, "" },
};
-#define TEST_STR_LIST_LEN (sizeof(test_str_list) / sizeof(test_str_list[0]))
UNITTEST_START
{
- for(size_t i = 0; i < TEST_CS_LIST_LEN; i++) {
+ for(size_t i = 0; i < CURL_ARRAYSIZE(test_cs_list); i++) {
const struct test_cs_entry *test = &test_cs_list[i];
const char *expect;
char buf[64] = "";
for(ptr = cs_test_string; ptr[0] != '\0'; ptr = end) {
const struct test_str_entry *test = &test_str_list[i];
- abort_if(i == TEST_STR_LIST_LEN, "should have been done");
+ abort_if(i == CURL_ARRAYSIZE(test_str_list), "should have been done");
id = Curl_cipher_suite_walk_str(&ptr, &end);
len = end - ptr;