diff options
author | Miroslav Kiradzhiyski <miroslav@virtualopensystems.com> | 2015-12-01 16:36:05 +0000 |
---|---|---|
committer | Zoltan Kiss <zoltan.kiss@linaro.org> | 2015-12-01 16:36:05 +0000 |
commit | 2a3b50c210b3efa75bbbfbe5b55367031c1563e4 (patch) | |
tree | bacab1aba86d4fb613cb97438f26d0eeac1e0087 | |
parent | d0fe316d5404b84212978931faa7d53c64a4efcc (diff) |
linux-dpdk: init: parse command line options using rte_strsplit()v1.4.0.0_DPDK_2.2.0-rc1
DPDK already implements rte_strsplit() which can be used instead of the
parse_dpdk_args() function. This saves some dynamic memory allocation
and simplifies the code.
Signed-off-by: Miroslav Kiradzhiyski <miroslav@virtualopensystems.com>
Signed-off-by: Nikolay Nikolaev <n.nikolaev@virtualopensystems.com>
Signed-off-by: Zoltan Kiss <zoltan.kiss@linaro.org>
-rw-r--r-- | platform/linux-dpdk/odp_init.c | 57 |
1 files changed, 16 insertions, 41 deletions
diff --git a/platform/linux-dpdk/odp_init.c b/platform/linux-dpdk/odp_init.c index 3d7ccd202..8a8b78599 100644 --- a/platform/linux-dpdk/odp_init.c +++ b/platform/linux-dpdk/odp_init.c @@ -13,6 +13,7 @@ #include <odp/system_info.h> #include <odp/cpumask.h> #include <unistd.h> +#include <rte_string_fns.h> #define PMD_EXT(drv) extern void devinitfn_##drv(void); PMD_EXT(pmd_af_packet_drv) @@ -111,43 +112,12 @@ void refer_constructors(void) { #endif } -static void parse_dpdk_args(const char *args, int *dst_argc, char ***dst_argv) -{ - char *buf = strdup(args); - int num = 1; - char *delim; - char **argv = calloc(num, sizeof(char *)); - - if (!buf || !argv) - ODP_ABORT("Can't allocate memory!\n"); - - argv[0] = buf; - - while (1) { - delim = strchr(argv[num - 1], ' '); - if (delim == NULL) - break; - argv = realloc(argv, (num + 1) * sizeof(char *)); - if (!argv) - ODP_ABORT("Can't reallocate memory!\n"); - argv[num] = delim + 1; - *delim = 0; - num++; - } - - *dst_argc = num; - *dst_argv = argv; - - return; -} - - static void print_dpdk_env_help(void) { - char **dpdk_argv; - int dpdk_argc, save_optind; + char help_str[] = "--help"; + char *dpdk_argv[] = {help_str}; + int save_optind, dpdk_argc = 1; - parse_dpdk_args("--help", &dpdk_argc, &dpdk_argv); ODP_ERR("Neither (char *)platform_params were provided to " "odp_init_global(),\n"); ODP_ERR("nor ODP_PLATFORM_PARAMS environment variable were " @@ -159,8 +129,6 @@ static void print_dpdk_env_help(void) optind = 1; rte_eal_init(dpdk_argc, dpdk_argv); optind = save_optind; - free(dpdk_argv[0]); - free(dpdk_argv); } @@ -169,7 +137,7 @@ int odp_init_dpdk(const char *cmdline) char **dpdk_argv; int dpdk_argc; char *full_cmdline; - int i, save_optind; + int i, save_optind, cmdlen; odp_cpumask_t mask; char mask_str[ODP_CPUMASK_STR_SIZE]; int32_t masklen; @@ -197,21 +165,28 @@ int odp_init_dpdk(const char *cmdline) strlen(" ") + strlen(cmdline)); /* first argument is facility log, simply bind it to odpdpdk for now.*/ - sprintf(full_cmdline, "odpdpdk -c %s %s", mask_str, cmdline); + cmdlen = sprintf(full_cmdline, "odpdpdk -c %s %s", mask_str, cmdline); - parse_dpdk_args(full_cmdline, &dpdk_argc, &dpdk_argv); + for (i = 0, dpdk_argc = 1; i < cmdlen; ++i) { + if (isspace(full_cmdline[i])) { + ++dpdk_argc; + } + } + dpdk_argv = malloc(dpdk_argc * sizeof(char *)); + + dpdk_argc = rte_strsplit(full_cmdline, strlen(full_cmdline), dpdk_argv, + dpdk_argc, ' '); for (i = 0; i < dpdk_argc; ++i) ODP_DBG("arg[%d]: %s\n", i, dpdk_argv[i]); fflush(stdout); - free(full_cmdline); /* reset optind, the caller application might have used it */ save_optind = optind; optind = 1; i = rte_eal_init(dpdk_argc, dpdk_argv); optind = save_optind; - free(dpdk_argv[0]); free(dpdk_argv); + free(full_cmdline); if (i < 0) { ODP_ERR("Cannot init the Intel DPDK EAL!\n"); return -1; |