Skip to content

Commit 5078bf8

Browse files
Lukas Slebodnikjhrozek
authored andcommitted
INI: Reduce count of argumets for ini_rules_check
We can use NULL terminated array of pointers instead of two argumets: array + length of array. It isn't an API change because lib_iniconfig has not been released yet. Reviewed-by: Jakub Hrozek <[email protected]>
1 parent 9873816 commit 5078bf8

File tree

3 files changed

+50
-47
lines changed

3 files changed

+50
-47
lines changed

ini/ini_configobj.c

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1515,10 +1515,9 @@ static int ini_allowed_options(const char *rule_name,
15151515

15161516
static ini_validator_func *
15171517
get_validator(char *validator_name,
1518-
struct ini_validator *validators,
1519-
int num_validators)
1518+
struct ini_validator **validators)
15201519
{
1521-
int i;
1520+
struct ini_validator *ext_validator;
15221521

15231522
/* First we check all internal validators */
15241523
if (strcmp(validator_name, "ini_dummy_noerror") == 0) {
@@ -1531,18 +1530,19 @@ get_validator(char *validator_name,
15311530
return ini_allowed_sections;
15321531
}
15331532

1534-
/* Now check the custom validators */
15351533
if (validators == NULL) {
15361534
return NULL;
15371535
}
15381536

1539-
for (i = 0; i < num_validators; i++) {
1537+
for (; *validators != NULL; ++validators) {
1538+
ext_validator = *validators;
1539+
15401540
/* Skip invalid external validator. Name is required */
1541-
if (validators[i].name == NULL) {
1541+
if (ext_validator->name == NULL) {
15421542
continue;
15431543
}
1544-
if (strcmp(validator_name, validators[i].name) == 0) {
1545-
return validators[i].func;
1544+
if (strcmp(validator_name, ext_validator->name) == 0) {
1545+
return ext_validator->func;
15461546
}
15471547
}
15481548

@@ -1551,8 +1551,7 @@ get_validator(char *validator_name,
15511551

15521552
int ini_rules_check(struct ini_cfgobj *rules_obj,
15531553
struct ini_cfgobj *config_obj,
1554-
struct ini_validator *extra_validators,
1555-
int num_extra_validators,
1554+
struct ini_validator **extra_validators,
15561555
struct ini_errobj *errobj)
15571556
{
15581557
char **sections;
@@ -1598,8 +1597,7 @@ int ini_rules_check(struct ini_cfgobj *rules_obj,
15981597
}
15991598

16001599
vname = ini_get_string_config_value(vo, NULL);
1601-
vfunc = get_validator(vname, extra_validators,
1602-
num_extra_validators);
1600+
vfunc = get_validator(vname, extra_validators);
16031601
if (vfunc == NULL) {
16041602
ret = ini_errobj_add_msg(errobj,
16051603
"Rule '%s' uses unknown "

ini/ini_configobj.h

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2206,11 +2206,9 @@ int ini_rules_read_from_file(const char *filename,
22062206
* @param[in] rules_obj config object representing the rules
22072207
* @param[in] config_obj config object representing the
22082208
* configuration
2209-
* @param[in] extra_validators Array of extrenal validators. Can be
2210-
* NULL if no external validators are
2211-
* used.
2212-
* @param[in] num_extra_validators Number of external validators in
2213-
* extra_validators array.
2209+
* @param[in] extra_validators NULL terminated array of external
2210+
* validators. Can be NULL if no external
2211+
* validators are used.
22142212
*
22152213
* @param[in] errobj errobj to store generated errors
22162214
* from validators.
@@ -2219,8 +2217,7 @@ int ini_rules_read_from_file(const char *filename,
22192217
*/
22202218
int ini_rules_check(struct ini_cfgobj *rules_obj,
22212219
struct ini_cfgobj *config_obj,
2222-
struct ini_validator *extra_validators,
2223-
int num_extra_validators,
2220+
struct ini_validator **extra_validators,
22242221
struct ini_errobj *errobj);
22252222

22262223
/**

ini/ini_validators_ut_check.c

Lines changed: 36 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ START_TEST(test_ini_noerror)
169169
ret = ini_errobj_create(&errobj);
170170
fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
171171

172-
ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
172+
ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
173173
fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
174174
fail_unless(ini_errobj_no_more_msgs(errobj));
175175

@@ -205,7 +205,7 @@ START_TEST(test_ini_error)
205205
ret = ini_errobj_create(&errobj);
206206
fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
207207

208-
ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
208+
ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
209209
fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
210210

211211
/* Should generate exactly one error */
@@ -225,7 +225,7 @@ START_TEST(test_ini_error)
225225
ret = ini_errobj_create(&errobj);
226226
fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
227227

228-
ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
228+
ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
229229
fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
230230

231231
/* Should generate exactly one error */
@@ -263,7 +263,7 @@ START_TEST(test_unknown_validator)
263263
ret = ini_errobj_create(&errobj);
264264
fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
265265

266-
ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
266+
ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
267267
fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
268268

269269
/* Should generate exactly one error */
@@ -299,10 +299,14 @@ START_TEST(test_custom_noerror)
299299
struct ini_cfgobj *cfg_obj;
300300
struct ini_errobj *errobj;
301301
int ret;
302-
struct ini_validator noerror = { "custom_noerror", custom_noerror };
303-
struct ini_validator missing_name[] = {
304-
{ NULL, custom_noerror },
305-
{ "custom_noerror", custom_noerror },
302+
struct ini_validator *noerror[] = {
303+
&(struct ini_validator){ "custom_noerror", custom_noerror },
304+
NULL
305+
};
306+
struct ini_validator *missing_name[] = {
307+
&(struct ini_validator){ NULL, custom_noerror },
308+
&(struct ini_validator){ "custom_noerror", custom_noerror },
309+
NULL
306310
};
307311

308312
char input_rules[] =
@@ -320,15 +324,15 @@ START_TEST(test_custom_noerror)
320324
fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
321325

322326
/* Pass the custom validator to ini_rules_check() */
323-
ret = ini_rules_check(rules_obj, cfg_obj, &noerror, 1, errobj);
327+
ret = ini_rules_check(rules_obj, cfg_obj, noerror, errobj);
324328
fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
325329

326330
/* Should generate no errors */
327331
fail_unless(ini_errobj_no_more_msgs(errobj));
328332

329333
/* Pass wrong external validator to ini_rules_check() */
330334
/* It should be skipped */
331-
ret = ini_rules_check(rules_obj, cfg_obj, missing_name, 2, errobj);
335+
ret = ini_rules_check(rules_obj, cfg_obj, missing_name, errobj);
332336
fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
333337

334338
/* Should generate no errors */
@@ -346,9 +350,13 @@ START_TEST(test_custom_error)
346350
struct ini_cfgobj *cfg_obj;
347351
struct ini_errobj *errobj;
348352
int ret;
349-
struct ini_validator error = { "custom_error", custom_error };
350-
struct ini_validator missing_function[] = {
351-
{ "custom_noerror", NULL },
353+
struct ini_validator *error[] = {
354+
&(struct ini_validator){ "custom_error", custom_error },
355+
NULL
356+
};
357+
struct ini_validator *missing_function[] = {
358+
&(struct ini_validator){ "custom_noerror", NULL },
359+
NULL
352360
};
353361
const char *errmsg;
354362

@@ -367,7 +375,7 @@ START_TEST(test_custom_error)
367375
fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
368376

369377
/* Pass the custom validator to ini_rules_check() */
370-
ret = ini_rules_check(rules_obj, cfg_obj, &error, 1, errobj);
378+
ret = ini_rules_check(rules_obj, cfg_obj, error, errobj);
371379
fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
372380

373381
/* Should generate one error */
@@ -384,7 +392,7 @@ START_TEST(test_custom_error)
384392
fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
385393

386394
/* Pass the custom validator to ini_rules_check() */
387-
ret = ini_rules_check(rules_obj, cfg_obj, missing_function, 1, errobj);
395+
ret = ini_rules_check(rules_obj, cfg_obj, missing_function, errobj);
388396

389397
/* Should generate one error for missing validator */
390398
fail_if(ini_errobj_no_more_msgs(errobj));
@@ -433,7 +441,7 @@ START_TEST(test_ini_allowed_options_ok)
433441
ret = ini_errobj_create(&errobj);
434442
fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
435443

436-
ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
444+
ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
437445
fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
438446

439447
/* Should generate no errors */
@@ -482,7 +490,7 @@ START_TEST(test_ini_allowed_options_no_section)
482490
ret = ini_errobj_create(&errobj);
483491
fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
484492

485-
ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
493+
ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
486494
fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
487495

488496
/* Should generate 2 errors (one from rules_check and one
@@ -516,7 +524,7 @@ START_TEST(test_ini_allowed_options_no_section)
516524
ret = ini_errobj_create(&errobj);
517525
fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
518526

519-
ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
527+
ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
520528
fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
521529

522530
/* Should generate 2 errors (one from rules_check and one
@@ -576,7 +584,7 @@ START_TEST(test_ini_allowed_options_wrong_regex)
576584
ret = ini_errobj_create(&errobj);
577585
fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
578586

579-
ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
587+
ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
580588
fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
581589

582590
/* Should generate 2 errors (one from rules_check and one
@@ -638,7 +646,7 @@ START_TEST(test_ini_allowed_options_typos)
638646
ret = ini_errobj_create(&errobj);
639647
fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
640648

641-
ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
649+
ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
642650
fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
643651

644652
/* Should generate 4 errors */
@@ -681,7 +689,7 @@ START_TEST(test_ini_allowed_sections_str_ok)
681689
ret = ini_errobj_create(&errobj);
682690
fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
683691

684-
ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
692+
ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
685693
fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
686694

687695
/* Should generate 0 errors */
@@ -723,7 +731,7 @@ START_TEST(test_ini_allowed_sections_str_typos)
723731
ret = ini_errobj_create(&errobj);
724732
fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
725733

726-
ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
734+
ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
727735
fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
728736

729737
/* Should generate 2 errors */
@@ -778,7 +786,7 @@ START_TEST(test_ini_allowed_sections_str_insensitive)
778786
"ini_errobj_create() failed for case_insensitive = %s: %s",
779787
case_insensitive_values[i], strerror(ret));
780788

781-
ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
789+
ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
782790
fail_unless(ret == 0,
783791
"ini_rules_check() failed for case_insensitive = %s: %s",
784792
case_insensitive_values[i], strerror(ret));
@@ -822,7 +830,7 @@ START_TEST(test_ini_allowed_sections_re_ok)
822830
ret = ini_errobj_create(&errobj);
823831
fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
824832

825-
ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
833+
ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
826834
fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
827835

828836
/* Should generate 0 errors */
@@ -862,7 +870,7 @@ START_TEST(test_ini_allowed_sections_re_typos)
862870
ret = ini_errobj_create(&errobj);
863871
fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
864872

865-
ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
873+
ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
866874
fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
867875

868876
/* Should generate 2 errors */
@@ -906,7 +914,7 @@ START_TEST(test_ini_allowed_sections_re_insensitive)
906914
ret = ini_errobj_create(&errobj);
907915
fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
908916

909-
ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
917+
ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
910918
fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
911919

912920
/* Should generate 0 errors */
@@ -946,7 +954,7 @@ START_TEST(test_ini_allowed_sections_missing_section)
946954
ret = ini_errobj_create(&errobj);
947955
fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
948956

949-
ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
957+
ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
950958
fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
951959

952960
/* Should generate 1 errors */
@@ -999,7 +1007,7 @@ START_TEST(test_ini_allowed_sections_wrong_regex)
9991007
ret = ini_errobj_create(&errobj);
10001008
fail_unless(ret == 0, "ini_errobj_create() failed: %s", strerror(ret));
10011009

1002-
ret = ini_rules_check(rules_obj, cfg_obj, NULL, 0, errobj);
1010+
ret = ini_rules_check(rules_obj, cfg_obj, NULL, errobj);
10031011
fail_unless(ret == 0, "ini_rules_check() failed: %s", strerror(ret));
10041012

10051013
/* Should generate 2 errors */

0 commit comments

Comments
 (0)