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

Function eth_dev_devargs_tokenise

dpdk/lib/ethdev/ethdev_driver.c:418–480  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

416}
417
418static int
419eth_dev_devargs_tokenise(struct rte_kvargs *arglist, const char *str_in)
420{
421 int state;
422 struct rte_kvargs_pair *pair;
423 char *letter;
424
425 arglist->str = strdup(str_in);
426 if (arglist->str == NULL)
427 return -ENOMEM;
428
429 letter = arglist->str;
430 state = 0;
431 arglist->count = 0;
432 pair = &arglist->pairs[0];
433 while (1) {
434 switch (state) {
435 case 0: /* Initial */
436 if (*letter == '=')
437 return -EINVAL;
438 else if (*letter == '\0')
439 return 0;
440
441 state = 1;
442 pair->key = letter;
443 /* fallthrough */
444
445 case 1: /* Parsing key */
446 if (*letter == '=') {
447 *letter = '\0';
448 pair->value = letter + 1;
449 state = 2;
450 } else if (*letter == ',' || *letter == '\0')
451 return -EINVAL;
452 break;
453
454
455 case 2: /* Parsing value */
456 if (*letter == '[')
457 state = 3;
458 else if (*letter == ',') {
459 *letter = '\0';
460 arglist->count++;
461 pair = &arglist->pairs[arglist->count];
462 state = 0;
463 } else if (*letter == '\0') {
464 letter--;
465 arglist->count++;
466 pair = &arglist->pairs[arglist->count];
467 state = 0;
468 }
469 break;
470
471 case 3: /* Parsing list */
472 if (*letter == ']')
473 state = 2;
474 else if (*letter == '\0')
475 return -EINVAL;

Callers 1

rte_eth_devargs_parseFunction · 0.85

Calls 1

strdupFunction · 0.85

Tested by

no test coverage detected