@@ -372,133 +372,9 @@ int argconfig_parse(int argc, char *argv[], const char *program_desc,
372
372
return ret ;
373
373
}
374
374
375
- int argconfig_parse_comma_sep_array (char * string , int * val , unsigned int max_length )
376
- {
377
- int ret = 0 ;
378
- unsigned long v ;
379
- char * tmp ;
380
- char * p ;
381
-
382
- if (is_null_or_empty (string ))
383
- return 0 ;
384
-
385
- tmp = strtok (string , "," );
386
- if (!tmp )
387
- return 0 ;
388
-
389
- v = strtoul (tmp , & p , 0 );
390
- if (* p != 0 )
391
- return -1 ;
392
- if (v > UINT_MAX ) {
393
- fprintf (stderr , "%s out of range\n" , tmp );
394
- return -1 ;
395
- }
396
- val [ret ] = v ;
397
-
398
- ret ++ ;
399
- while (1 ) {
400
- tmp = strtok (NULL , "," );
401
-
402
- if (tmp == NULL )
403
- return ret ;
404
-
405
- if (ret >= max_length )
406
- return -1 ;
407
-
408
- v = strtoul (tmp , & p , 0 );
409
- if (* p != 0 )
410
- return -1 ;
411
- if (v > UINT_MAX ) {
412
- fprintf (stderr , "%s out of range\n" , tmp );
413
- return -1 ;
414
- }
415
- val [ret ] = v ;
416
- ret ++ ;
417
- }
418
- }
419
-
420
- int argconfig_parse_comma_sep_array_short (char * string , unsigned short * val ,
421
- unsigned int max_length )
422
- {
423
- int ret = 0 ;
424
- unsigned long v ;
425
- char * tmp ;
426
- char * p ;
427
-
428
- if (is_null_or_empty (string ))
429
- return 0 ;
430
-
431
- tmp = strtok (string , "," );
432
- if (!tmp )
433
- return 0 ;
434
-
435
- v = strtoul (tmp , & p , 0 );
436
- if (* p != 0 )
437
- return -1 ;
438
- if (v > UINT16_MAX ) {
439
- fprintf (stderr , "%s out of range\n" , tmp );
440
- return -1 ;
441
- }
442
- val [ret ] = v ;
443
- ret ++ ;
444
-
445
- while (1 ) {
446
- tmp = strtok (NULL , "," );
447
- if (tmp == NULL )
448
- return ret ;
449
-
450
- if (ret >= max_length )
451
- return -1 ;
452
-
453
- v = strtoul (tmp , & p , 0 );
454
- if (* p != 0 )
455
- return -1 ;
456
- if (v > UINT16_MAX ) {
457
- fprintf (stderr , "%s out of range\n" , tmp );
458
- return -1 ;
459
- }
460
- val [ret ] = v ;
461
- ret ++ ;
462
- }
463
- }
464
-
465
- int argconfig_parse_comma_sep_array_long (char * string , unsigned long long * val ,
466
- unsigned int max_length )
467
- {
468
- int ret = 0 ;
469
- char * tmp ;
470
- char * p ;
471
-
472
- if (is_null_or_empty (string ))
473
- return 0 ;
474
-
475
- tmp = strtok (string , "," );
476
- if (tmp == NULL )
477
- return 0 ;
478
-
479
- val [ret ] = strtoll (tmp , & p , 0 );
480
- if (* p != 0 )
481
- return -1 ;
482
- ret ++ ;
483
- while (1 ) {
484
- tmp = strtok (NULL , "," );
485
-
486
- if (tmp == NULL )
487
- return ret ;
488
-
489
- if (ret >= max_length )
490
- return -1 ;
491
-
492
- val [ret ] = strtoll (tmp , & p , 0 );
493
- if (* p != 0 )
494
- return -1 ;
495
- ret ++ ;
496
- }
497
- }
498
-
499
- #define DEFINE_ARGCONFIG_PARSE_COMMA_SEP_ARRAY_UINT_FUNC (size ) \
500
- int argconfig_parse_comma_sep_array_u##size(char *string, \
501
- __u##size *val, \
375
+ #define DEFINE_ARGCONFIG_PARSE_COMMA_SEP_ARRAY_FUNC (name , ret_t , ret_max ) \
376
+ int argconfig_parse_comma_sep_array ## name(char *string, \
377
+ ret_t *val, \
502
378
unsigned int max_length) \
503
379
{ \
504
380
int ret = 0; \
@@ -510,40 +386,35 @@ int argconfig_parse_comma_sep_array_u##size(char *string, \
510
386
return 0; \
511
387
\
512
388
tmp = strtok(string, ","); \
513
- if (!tmp) \
514
- return 0; \
515
- \
516
- v = strtoumax(tmp, &p, 0); \
517
- if (*p != 0) \
518
- return -1; \
519
- if (v > UINT##size##_MAX) { \
520
- fprintf(stderr, "%s out of range\n", tmp); \
521
- return -1; \
522
- } \
523
- val[ret] = v; \
524
- \
525
- ret++; \
526
- while (1) { \
527
- tmp = strtok(NULL, ","); \
528
- \
529
- if (tmp == NULL) \
530
- return ret; \
531
389
\
390
+ while (tmp) { \
532
391
if (ret >= max_length) \
533
392
return -1; \
534
393
\
535
394
v = strtoumax(tmp, &p, 0); \
536
395
if (*p != 0) \
537
396
return -1; \
538
- if (v > UINT##size##_MAX ) { \
397
+ if (v > ret_max ) { \
539
398
fprintf(stderr, "%s out of range\n", tmp); \
540
399
return -1; \
541
400
} \
542
401
val[ret] = v; \
543
402
ret++; \
403
+ \
404
+ tmp = strtok(NULL, ","); \
544
405
} \
406
+ \
407
+ return ret; \
545
408
}
546
409
410
+ DEFINE_ARGCONFIG_PARSE_COMMA_SEP_ARRAY_FUNC (, int , UINT_MAX )
411
+ DEFINE_ARGCONFIG_PARSE_COMMA_SEP_ARRAY_FUNC (_short , unsigned short , UINT16_MAX )
412
+ DEFINE_ARGCONFIG_PARSE_COMMA_SEP_ARRAY_FUNC (_long , unsigned long long , ULLONG_MAX )
413
+
414
+ #define DEFINE_ARGCONFIG_PARSE_COMMA_SEP_ARRAY_UINT_FUNC (size ) \
415
+ DEFINE_ARGCONFIG_PARSE_COMMA_SEP_ARRAY_FUNC(_u ## size, __u ## size, \
416
+ UINT ## size ## _MAX)
417
+
547
418
DEFINE_ARGCONFIG_PARSE_COMMA_SEP_ARRAY_UINT_FUNC (16 );
548
419
DEFINE_ARGCONFIG_PARSE_COMMA_SEP_ARRAY_UINT_FUNC (32 );
549
420
DEFINE_ARGCONFIG_PARSE_COMMA_SEP_ARRAY_UINT_FUNC (64 );
0 commit comments