MCPcopy Create free account
hub / github.com/F-Stack/f-stack / parse_xstats_list

Function parse_xstats_list

dpdk/app/test-pmd/parameters.c:481–545  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

479}
480
481static int
482parse_xstats_list(const char *in_str, struct rte_eth_xstat_name **xstats,
483 unsigned int *xstats_num)
484{
485 int max_names_nb, names_nb, nonempty_names_nb;
486 int name, nonempty_name;
487 int stringlen;
488 char **names;
489 char *str;
490 int ret;
491 int i;
492
493 names = NULL;
494 str = strdup(in_str);
495 if (str == NULL) {
496 ret = -ENOMEM;
497 goto out;
498 }
499 stringlen = strlen(str);
500
501 for (i = 0, max_names_nb = 1; str[i] != '\0'; i++) {
502 if (str[i] == ',')
503 max_names_nb++;
504 }
505
506 names = calloc(max_names_nb, sizeof(*names));
507 if (names == NULL) {
508 ret = -ENOMEM;
509 goto out;
510 }
511
512 names_nb = rte_strsplit(str, stringlen, names, max_names_nb, ',');
513 if (names_nb < 0) {
514 ret = -EINVAL;
515 goto out;
516 }
517
518 nonempty_names_nb = 0;
519 for (i = 0; i < names_nb; i++) {
520 if (names[i][0] == '\0')
521 continue;
522 nonempty_names_nb++;
523 }
524 *xstats = calloc(nonempty_names_nb, sizeof(**xstats));
525 if (*xstats == NULL) {
526 ret = -ENOMEM;
527 goto out;
528 }
529
530 for (name = nonempty_name = 0; name < names_nb; name++) {
531 if (names[name][0] == '\0')
532 continue;
533 rte_strscpy((*xstats)[nonempty_name].name, names[name],
534 sizeof((*xstats)[nonempty_name].name));
535 nonempty_name++;
536 }
537
538 *xstats_num = nonempty_names_nb;

Callers 1

launch_args_parseFunction · 0.85

Calls 5

strdupFunction · 0.85
callocFunction · 0.85
rte_strsplitFunction · 0.85
rte_strscpyFunction · 0.85
freeFunction · 0.50

Tested by

no test coverage detected