Skip to content

Commit b9cb1cb

Browse files
Merge #1824: util: introduce and use ARRAY_SIZE macro
921b971 util: introduce and use `ARRAY_SIZE` macro (Sebastian Falbesoner) Pull request description: This PR is another tiny improvement found while working on #1765, with the goal to avoid code repetition. The `ARRAY_SIZE` macro definition is pretty wide-spread in C projects and e.g. matches the one [used in the Linux Kernel](https://github.com/torvalds/linux/blob/9702969978695d9a699a1f34771580cdbb153b33/include/linux/array_size.h#L11) (without the additional check to reject pointers, as we would need GNU C for that, see e.g. https://stackoverflow.com/a/19455169; not sure if a useful counterpart exists that only relies on C89). Replacement instances were identified via `$ git grep sizeof.*/.*sizeof`. ACKs for top commit: w0xlt: ACK 921b971 real-or-random: utACK 921b971 Tree-SHA512: 44b6bf0132cf00fade526a3fc04e03dc896d04874123614c032206b61f97c81f94d139b6cc0c108eceaa699251580c19420d230b3150607303ca2cb7ab9a0bcb
2 parents c0a2aba + 921b971 commit b9cb1cb

File tree

8 files changed

+42
-38
lines changed

8 files changed

+42
-38
lines changed

src/bench.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,7 @@ int main(int argc, char** argv) {
183183
"ecdsa_recover", "schnorrsig", "schnorrsig_verify", "schnorrsig_sign", "ec",
184184
"keygen", "ec_keygen", "ellswift", "encode", "ellswift_encode", "decode",
185185
"ellswift_decode", "ellswift_keygen", "ellswift_ecdh"};
186-
size_t valid_args_size = sizeof(valid_args)/sizeof(valid_args[0]);
187-
int invalid_args = have_invalid_args(argc, argv, valid_args, valid_args_size);
186+
int invalid_args = have_invalid_args(argc, argv, valid_args, ARRAY_SIZE(valid_args));
188187

189188
int default_iters = 20000;
190189
int iters = get_iters(default_iters);

src/modules/ellswift/tests_impl.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
#include "../../../include/secp256k1_ellswift.h"
1010
#include "../../unit_test.h"
11+
#include "../../util.h"
1112

1213
struct ellswift_xswiftec_inv_test {
1314
int enc_bitmap;
@@ -180,7 +181,7 @@ static int ellswift_xdh_hash_x32(unsigned char *output, const unsigned char *x32
180181
/* Run the test vectors for ellswift encoding */
181182
void ellswift_encoding_test_vectors_tests(void) {
182183
int i;
183-
for (i = 0; (unsigned)i < sizeof(ellswift_xswiftec_inv_tests) / sizeof(ellswift_xswiftec_inv_tests[0]); ++i) {
184+
for (i = 0; (unsigned)i < ARRAY_SIZE(ellswift_xswiftec_inv_tests); ++i) {
184185
const struct ellswift_xswiftec_inv_test *testcase = &ellswift_xswiftec_inv_tests[i];
185186
int c;
186187
for (c = 0; c < 8; ++c) {
@@ -200,7 +201,7 @@ void ellswift_encoding_test_vectors_tests(void) {
200201
/* Run the test vectors for ellswift decoding */
201202
void ellswift_decoding_test_vectors_tests(void) {
202203
int i;
203-
for (i = 0; (unsigned)i < sizeof(ellswift_decode_tests) / sizeof(ellswift_decode_tests[0]); ++i) {
204+
for (i = 0; (unsigned)i < ARRAY_SIZE(ellswift_decode_tests); ++i) {
204205
const struct ellswift_decode_test *testcase = &ellswift_decode_tests[i];
205206
secp256k1_pubkey pubkey;
206207
secp256k1_ge ge;
@@ -217,7 +218,7 @@ void ellswift_decoding_test_vectors_tests(void) {
217218
/* Run the test vectors for ellswift expected xdh BIP324 shared secrets */
218219
void ellswift_xdh_test_vectors_tests(void) {
219220
int i;
220-
for (i = 0; (unsigned)i < sizeof(ellswift_xdh_tests_bip324) / sizeof(ellswift_xdh_tests_bip324[0]); ++i) {
221+
for (i = 0; (unsigned)i < ARRAY_SIZE(ellswift_xdh_tests_bip324); ++i) {
221222
const struct ellswift_xdh_test *test = &ellswift_xdh_tests_bip324[i];
222223
unsigned char shared_secret[32];
223224
int ret;

src/modules/musig/tests_impl.h

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -769,7 +769,7 @@ static void musig_test_vectors_keyagg(void) {
769769
size_t i;
770770
const struct musig_key_agg_vector *vector = &musig_key_agg_vector;
771771

772-
for (i = 0; i < sizeof(vector->valid_case)/sizeof(vector->valid_case[0]); i++) {
772+
for (i = 0; i < ARRAY_SIZE(vector->valid_case); i++) {
773773
const struct musig_key_agg_valid_test_case *c = &vector->valid_case[i];
774774
enum MUSIG_ERROR error;
775775
secp256k1_musig_keyagg_cache keyagg_cache;
@@ -779,7 +779,7 @@ static void musig_test_vectors_keyagg(void) {
779779
CHECK(secp256k1_memcmp_var(agg_pk, c->expected, sizeof(agg_pk)) == 0);
780780
}
781781

782-
for (i = 0; i < sizeof(vector->error_case)/sizeof(vector->error_case[0]); i++) {
782+
for (i = 0; i < ARRAY_SIZE(vector->error_case); i++) {
783783
const struct musig_key_agg_error_test_case *c = &vector->error_case[i];
784784
enum MUSIG_ERROR error;
785785
secp256k1_musig_keyagg_cache keyagg_cache;
@@ -793,7 +793,7 @@ static void musig_test_vectors_noncegen(void) {
793793
size_t i;
794794
const struct musig_nonce_gen_vector *vector = &musig_nonce_gen_vector;
795795

796-
for (i = 0; i < sizeof(vector->test_case)/sizeof(vector->test_case[0]); i++) {
796+
for (i = 0; i < ARRAY_SIZE(vector->test_case); i++) {
797797
const struct musig_nonce_gen_test_case *c = &vector->test_case[i];
798798
secp256k1_musig_keyagg_cache keyagg_cache;
799799
secp256k1_musig_keyagg_cache *keyagg_cache_ptr = NULL;
@@ -847,7 +847,7 @@ static void musig_test_vectors_nonceagg(void) {
847847
int j;
848848
const struct musig_nonce_agg_vector *vector = &musig_nonce_agg_vector;
849849

850-
for (i = 0; i < sizeof(vector->valid_case)/sizeof(vector->valid_case[0]); i++) {
850+
for (i = 0; i < ARRAY_SIZE(vector->valid_case); i++) {
851851
const struct musig_nonce_agg_test_case *c = &vector->valid_case[i];
852852
secp256k1_musig_pubnonce pubnonce[2];
853853
const secp256k1_musig_pubnonce *pubnonce_ptr[2];
@@ -862,7 +862,7 @@ static void musig_test_vectors_nonceagg(void) {
862862
CHECK(secp256k1_musig_aggnonce_serialize(CTX, aggnonce66, &aggnonce));
863863
CHECK(secp256k1_memcmp_var(aggnonce66, c->expected, 33) == 0);
864864
}
865-
for (i = 0; i < sizeof(vector->error_case)/sizeof(vector->error_case[0]); i++) {
865+
for (i = 0; i < ARRAY_SIZE(vector->error_case); i++) {
866866
const struct musig_nonce_agg_test_case *c = &vector->error_case[i];
867867
secp256k1_musig_pubnonce pubnonce[2];
868868
for (j = 0; j < 2; j++) {
@@ -886,7 +886,7 @@ static void musig_test_vectors_signverify(void) {
886886
size_t i;
887887
const struct musig_sign_verify_vector *vector = &musig_sign_verify_vector;
888888

889-
for (i = 0; i < sizeof(vector->valid_case)/sizeof(vector->valid_case[0]); i++) {
889+
for (i = 0; i < ARRAY_SIZE(vector->valid_case); i++) {
890890
const struct musig_valid_case *c = &vector->valid_case[i];
891891
enum MUSIG_ERROR error;
892892
secp256k1_musig_keyagg_cache keyagg_cache;
@@ -914,7 +914,7 @@ static void musig_test_vectors_signverify(void) {
914914
CHECK(secp256k1_musig_pubnonce_parse(CTX, &pubnonce, vector->pubnonces[0]));
915915
CHECK(secp256k1_musig_partial_sig_verify(CTX, &partial_sig, &pubnonce, &pubkey, &keyagg_cache, &session));
916916
}
917-
for (i = 0; i < sizeof(vector->sign_error_case)/sizeof(vector->sign_error_case[0]); i++) {
917+
for (i = 0; i < ARRAY_SIZE(vector->sign_error_case); i++) {
918918
const struct musig_sign_error_case *c = &vector->sign_error_case[i];
919919
enum MUSIG_ERROR error;
920920
secp256k1_musig_keyagg_cache keyagg_cache;
@@ -953,7 +953,7 @@ static void musig_test_vectors_signverify(void) {
953953
musig_test_set_secnonce(&secnonce, vector->secnonces[c->secnonce_index], &pubkey);
954954
CHECK_ILLEGAL(CTX, secp256k1_musig_partial_sign(CTX, &partial_sig, &secnonce, &keypair, &keyagg_cache, &session));
955955
}
956-
for (i = 0; i < sizeof(vector->verify_fail_case)/sizeof(vector->verify_fail_case[0]); i++) {
956+
for (i = 0; i < ARRAY_SIZE(vector->verify_fail_case); i++) {
957957
const struct musig_verify_fail_error_case *c = &vector->verify_fail_case[i];
958958
enum MUSIG_ERROR error;
959959
secp256k1_musig_keyagg_cache keyagg_cache;
@@ -987,7 +987,7 @@ static void musig_test_vectors_signverify(void) {
987987
expected = c->error != MUSIG_SIG_VERIFY;
988988
CHECK(expected == secp256k1_musig_partial_sig_verify(CTX, &partial_sig, pubnonce, &pubkey, &keyagg_cache, &session));
989989
}
990-
for (i = 0; i < sizeof(vector->verify_error_case)/sizeof(vector->verify_error_case[0]); i++) {
990+
for (i = 0; i < ARRAY_SIZE(vector->verify_error_case); i++) {
991991
const struct musig_verify_fail_error_case *c = &vector->verify_error_case[i];
992992
enum MUSIG_ERROR error;
993993
secp256k1_musig_keyagg_cache keyagg_cache;
@@ -1015,7 +1015,7 @@ static void musig_test_vectors_tweak(void) {
10151015
CHECK(secp256k1_musig_aggnonce_parse(CTX, &aggnonce, vector->aggnonce));
10161016
CHECK(secp256k1_ec_pubkey_parse(CTX, &pubkey, vector->pubkeys[0], sizeof(vector->pubkeys[0])));
10171017

1018-
for (i = 0; i < sizeof(vector->valid_case)/sizeof(vector->valid_case[0]); i++) {
1018+
for (i = 0; i < ARRAY_SIZE(vector->valid_case); i++) {
10191019
const struct musig_tweak_case *c = &vector->valid_case[i];
10201020
enum MUSIG_ERROR error;
10211021
secp256k1_musig_keyagg_cache keyagg_cache;
@@ -1039,7 +1039,7 @@ static void musig_test_vectors_tweak(void) {
10391039
CHECK(secp256k1_musig_pubnonce_parse(CTX, &pubnonce, vector->pubnonces[c->nonce_indices[c->signer_index]]));
10401040
CHECK(secp256k1_musig_partial_sig_verify(CTX, &partial_sig, &pubnonce, &pubkey, &keyagg_cache, &session));
10411041
}
1042-
for (i = 0; i < sizeof(vector->error_case)/sizeof(vector->error_case[0]); i++) {
1042+
for (i = 0; i < ARRAY_SIZE(vector->error_case); i++) {
10431043
const struct musig_tweak_case *c = &vector->error_case[i];
10441044
enum MUSIG_ERROR error;
10451045
secp256k1_musig_keyagg_cache keyagg_cache;
@@ -1052,7 +1052,7 @@ static void musig_test_vectors_sigagg(void) {
10521052
size_t i, j;
10531053
const struct musig_sig_agg_vector *vector = &musig_sig_agg_vector;
10541054

1055-
for (i = 0; i < sizeof(vector->valid_case)/sizeof(vector->valid_case[0]); i++) {
1055+
for (i = 0; i < ARRAY_SIZE(vector->valid_case); i++) {
10561056
const struct musig_sig_agg_case *c = &vector->valid_case[i];
10571057
enum MUSIG_ERROR error;
10581058
unsigned char final_sig[64];
@@ -1061,8 +1061,8 @@ static void musig_test_vectors_sigagg(void) {
10611061
secp256k1_xonly_pubkey agg_pk;
10621062
secp256k1_musig_aggnonce aggnonce;
10631063
secp256k1_musig_session session;
1064-
secp256k1_musig_partial_sig partial_sig[(sizeof(vector->psigs)/sizeof(vector->psigs[0]))];
1065-
const secp256k1_musig_partial_sig *partial_sig_ptr[(sizeof(vector->psigs)/sizeof(vector->psigs[0]))];
1064+
secp256k1_musig_partial_sig partial_sig[ARRAY_SIZE(vector->psigs)];
1065+
const secp256k1_musig_partial_sig *partial_sig_ptr[ARRAY_SIZE(vector->psigs)];
10661066

10671067
CHECK(musig_vectors_keyagg_and_tweak(&error, &keyagg_cache, agg_pk32, vector->pubkeys, vector->tweaks, c->key_indices_len, c->key_indices, c->tweak_indices_len, c->tweak_indices, c->is_xonly));
10681068
CHECK(secp256k1_musig_aggnonce_parse(CTX, &aggnonce, c->aggnonce));
@@ -1078,9 +1078,9 @@ static void musig_test_vectors_sigagg(void) {
10781078
CHECK(secp256k1_xonly_pubkey_parse(CTX, &agg_pk, agg_pk32));
10791079
CHECK(secp256k1_schnorrsig_verify(CTX, final_sig, vector->msg, sizeof(vector->msg), &agg_pk) == 1);
10801080
}
1081-
for (i = 0; i < sizeof(vector->error_case)/sizeof(vector->error_case[0]); i++) {
1081+
for (i = 0; i < ARRAY_SIZE(vector->error_case); i++) {
10821082
const struct musig_sig_agg_case *c = &vector->error_case[i];
1083-
secp256k1_musig_partial_sig partial_sig[(sizeof(vector->psigs)/sizeof(vector->psigs[0]))];
1083+
secp256k1_musig_partial_sig partial_sig[ARRAY_SIZE(vector->psigs)];
10841084
for (j = 0; j < c->psig_indices_len; j++) {
10851085
int expected = c->invalid_sig_idx != (int)j;
10861086
CHECK(expected == secp256k1_musig_partial_sig_parse(CTX, &partial_sig[j], vector->psigs[c->psig_indices[j]]));

src/modules/schnorrsig/tests_exhaustive_impl.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ static const unsigned char invalid_pubkey_bytes[][32] = {
5656
}
5757
};
5858

59-
#define NUM_INVALID_KEYS (sizeof(invalid_pubkey_bytes) / sizeof(invalid_pubkey_bytes[0]))
59+
#define NUM_INVALID_KEYS (ARRAY_SIZE(invalid_pubkey_bytes))
6060

6161
static int secp256k1_hardened_nonce_function_smallint(unsigned char *nonce32, const unsigned char *msg,
6262
size_t msglen,

src/precompute_ecmult_gen.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ int main(int argc, char **argv) {
8080

8181
fprintf(fp, "const secp256k1_ge_storage secp256k1_ecmult_gen_prec_table[COMB_BLOCKS][COMB_POINTS] = {\n");
8282
fprintf(fp, "#if 0\n");
83-
for (config = 0; config < sizeof(CONFIGS) / sizeof(*CONFIGS); ++config) {
83+
for (config = 0; config < ARRAY_SIZE(CONFIGS); ++config) {
8484
print_table(fp, CONFIGS[config][0], CONFIGS[config][1]);
8585
if (CONFIGS[config][0] == COMB_BLOCKS && CONFIGS[config][1] == COMB_TEETH) {
8686
did_current_config = 1;

src/tests.c

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ static void run_xoshiro256pp_tests(void) {
9292
{
9393
size_t i;
9494
/* Sanity check that we run before the actual seeding. */
95-
for (i = 0; i < sizeof(secp256k1_test_state)/sizeof(secp256k1_test_state[0]); i++) {
95+
for (i = 0; i < ARRAY_SIZE(secp256k1_test_state); i++) {
9696
CHECK(secp256k1_test_state[i] == 0);
9797
}
9898
}
@@ -146,7 +146,7 @@ static void run_deprecated_context_flags_test(void) {
146146
SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY };
147147
secp256k1_context *none_ctx = secp256k1_context_create(SECP256K1_CONTEXT_NONE);
148148
int i;
149-
for (i = 0; i < (int)(sizeof(flags)/sizeof(flags[0])); i++) {
149+
for (i = 0; i < (int)(ARRAY_SIZE(flags)); i++) {
150150
secp256k1_context *tmp_ctx;
151151
CHECK(secp256k1_context_preallocated_size(SECP256K1_CONTEXT_NONE) == secp256k1_context_preallocated_size(flags[i]));
152152
tmp_ctx = secp256k1_context_create(flags[i]);
@@ -437,13 +437,13 @@ static void run_ctz_tests(void) {
437437
static const uint64_t b64[] = {1, 0xffffffffffffffff, 0xbcd02462139b3fc3, 0x98b5f80c769693ef};
438438
int shift;
439439
unsigned i;
440-
for (i = 0; i < sizeof(b32) / sizeof(b32[0]); ++i) {
440+
for (i = 0; i < ARRAY_SIZE(b32); ++i) {
441441
for (shift = 0; shift < 32; ++shift) {
442442
CHECK(secp256k1_ctz32_var_debruijn(b32[i] << shift) == shift);
443443
CHECK(secp256k1_ctz32_var(b32[i] << shift) == shift);
444444
}
445445
}
446-
for (i = 0; i < sizeof(b64) / sizeof(b64[0]); ++i) {
446+
for (i = 0; i < ARRAY_SIZE(b64); ++i) {
447447
for (shift = 0; shift < 64; ++shift) {
448448
CHECK(secp256k1_ctz64_var_debruijn(b64[i] << shift) == shift);
449449
CHECK(secp256k1_ctz64_var(b64[i] << shift) == shift);
@@ -478,7 +478,7 @@ static void run_sha256_known_output_tests(void) {
478478
unsigned int i, ninputs;
479479

480480
/* Skip last input vector for low iteration counts */
481-
ninputs = sizeof(inputs)/sizeof(inputs[0]) - 1;
481+
ninputs = ARRAY_SIZE(inputs) - 1;
482482
CONDITIONAL_TEST(16, "run_sha256_known_output_tests 1000000") ninputs++;
483483

484484
for (i = 0; i < ninputs; i++) {
@@ -603,7 +603,7 @@ static void run_sha256_counter_tests(void) {
603603
{0xec, 0x12, 0x24, 0x9f, 0x35, 0xa4, 0x29, 0x8b, 0x9e, 0x4a, 0x95, 0xf8, 0x61, 0xaf, 0x61, 0xc5, 0x66, 0x55, 0x3e, 0x3f, 0x2a, 0x98, 0xea, 0x71, 0x16, 0x6b, 0x1c, 0xd9, 0xe4, 0x09, 0xd2, 0x8e},
604604
};
605605
unsigned int i;
606-
for (i = 0; i < sizeof(midstates)/sizeof(midstates[0]); i++) {
606+
for (i = 0; i < ARRAY_SIZE(midstates); i++) {
607607
unsigned char out[32];
608608
secp256k1_sha256 hasher = midstates[i];
609609
secp256k1_sha256_write(&hasher, (const unsigned char*)input, strlen(input));
@@ -1662,7 +1662,7 @@ static void run_modinv_tests(void) {
16621662
int i, j, ok;
16631663

16641664
/* Test known inputs/outputs */
1665-
for (i = 0; (size_t)i < sizeof(CASES) / sizeof(CASES[0]); ++i) {
1665+
for (i = 0; (size_t)i < ARRAY_SIZE(CASES); ++i) {
16661666
uint16_t out[16];
16671667
test_modinv32_uint16(out, CASES[i][0], CASES[i][1]);
16681668
for (j = 0; j < 16; ++j) CHECK(out[j] == CASES[i][2][j]);
@@ -2310,7 +2310,7 @@ static void run_scalar_tests(void) {
23102310
SECP256K1_SCALAR_CONST(0x7ffffffful, 0xfffffffful, 0xfffffffful, 0xfffffffful, 0xfffffffful, 0xfffffffful, 0xfffffffful, 0xfffffffful),
23112311
};
23122312
unsigned n;
2313-
for (n = 0; n < sizeof(HALF_TESTS) / sizeof(HALF_TESTS[0]); ++n) {
2313+
for (n = 0; n < ARRAY_SIZE(HALF_TESTS); ++n) {
23142314
secp256k1_scalar s;
23152315
secp256k1_scalar_half(&s, &HALF_TESTS[n]);
23162316
secp256k1_scalar_add(&s, &s, &s);
@@ -3578,15 +3578,15 @@ static void run_inverse_tests(void)
35783578
secp256k1_scalar x_scalar;
35793579
memset(b32, 0, sizeof(b32));
35803580
/* Test fixed test cases through test_inverse_{scalar,field}, both ways. */
3581-
for (i = 0; (size_t)i < sizeof(fe_cases)/sizeof(fe_cases[0]); ++i) {
3581+
for (i = 0; (size_t)i < ARRAY_SIZE(fe_cases); ++i) {
35823582
for (var = 0; var <= 1; ++var) {
35833583
test_inverse_field(&x_fe, &fe_cases[i][0], var);
35843584
CHECK(fe_equal(&x_fe, &fe_cases[i][1]));
35853585
test_inverse_field(&x_fe, &fe_cases[i][1], var);
35863586
CHECK(fe_equal(&x_fe, &fe_cases[i][0]));
35873587
}
35883588
}
3589-
for (i = 0; (size_t)i < sizeof(scalar_cases)/sizeof(scalar_cases[0]); ++i) {
3589+
for (i = 0; (size_t)i < ARRAY_SIZE(scalar_cases); ++i) {
35903590
for (var = 0; var <= 1; ++var) {
35913591
test_inverse_scalar(&x_scalar, &scalar_cases[i][0], var);
35923592
CHECK(secp256k1_scalar_eq(&x_scalar, &scalar_cases[i][1]));
@@ -4462,7 +4462,7 @@ static void run_ecmult_near_split_bound(void) {
44624462
int i;
44634463
unsigned j;
44644464
for (i = 0; i < 4*COUNT; ++i) {
4465-
for (j = 0; j < sizeof(scalars_near_split_bounds) / sizeof(scalars_near_split_bounds[0]); ++j) {
4465+
for (j = 0; j < ARRAY_SIZE(scalars_near_split_bounds); ++j) {
44664466
test_ecmult_target(&scalars_near_split_bounds[j], 0);
44674467
test_ecmult_target(&scalars_near_split_bounds[j], 1);
44684468
test_ecmult_target(&scalars_near_split_bounds[j], 2);
@@ -4586,7 +4586,7 @@ static void ecmult_const_edges(void) {
45864586
secp256k1_ge point;
45874587
secp256k1_gej res;
45884588
size_t i;
4589-
size_t cases = 1 + sizeof(scalars_near_split_bounds) / sizeof(scalars_near_split_bounds[0]);
4589+
size_t cases = 1 + ARRAY_SIZE(scalars_near_split_bounds);
45904590

45914591
/* We are trying to reach the following edge cases (variables are defined as
45924592
* in ecmult_const_impl.h):
@@ -5738,7 +5738,7 @@ static void run_endomorphism_tests(void) {
57385738
testutil_random_scalar_order_test(&full);
57395739
test_scalar_split(&full);
57405740
}
5741-
for (i = 0; i < sizeof(scalars_near_split_bounds) / sizeof(scalars_near_split_bounds[0]); ++i) {
5741+
for (i = 0; i < ARRAY_SIZE(scalars_near_split_bounds); ++i) {
57425742
test_scalar_split(&scalars_near_split_bounds[i]);
57435743
}
57445744
}
@@ -7892,7 +7892,7 @@ static int teardown(void) {
78927892
int main(int argc, char **argv) {
78937893
struct tf_framework tf = {0};
78947894
tf.registry_modules = registry_modules;
7895-
tf.num_modules = sizeof(registry_modules) / sizeof(registry_modules[0]);
7895+
tf.num_modules = ARRAY_SIZE(registry_modules);
78967896
tf.registry_no_rng = &registry_modules_no_rng;
78977897

78987898
/* Add context creation/destruction functions */

src/unit_test.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
#ifndef SECP256K1_UNIT_TEST_H
77
#define SECP256K1_UNIT_TEST_H
88

9+
#include "util.h"
10+
911
/* --------------------------------------------------------- */
1012
/* Configurable constants */
1113
/* --------------------------------------------------------- */
@@ -27,7 +29,7 @@
2729
#define MAKE_TEST_MODULE(name) { \
2830
#name, \
2931
tests_##name, \
30-
sizeof(tests_##name) / sizeof(tests_##name[0]) \
32+
ARRAY_SIZE(tests_##name) \
3133
}
3234

3335
/* Macro to wrap a test internal function with a COUNT loop (iterations number) */

src/util.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,8 @@ static SECP256K1_INLINE void *checked_malloc(const secp256k1_callback* cb, size_
181181

182182
#define ROUND_TO_ALIGN(size) (CEIL_DIV(size, ALIGNMENT) * ALIGNMENT)
183183

184+
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
185+
184186
/* Macro for restrict, when available and not in a VERIFY build. */
185187
#if defined(SECP256K1_BUILD) && defined(VERIFY)
186188
# define SECP256K1_RESTRICT

0 commit comments

Comments
 (0)