From 6039bd1b7e5e71a0a171406cf980d2d61a6e79d4 Mon Sep 17 00:00:00 2001 From: Ioana Ciornei Date: Tue, 24 Oct 2017 16:29:37 +0000 Subject: [PATCH 02/12] dprc: add --full-path option to dprc list command Instead of printing an indented dprc list, activating the --full-path option restool will print the entire path of the dprc. Example: root@rodos:~# restool dprc list --full-path dprc.1 dprc.1/dprc.3 dprc.1/dprc.2 dprc.1/dprc.2/dprc.4 Signed-off-by: Ioana Ciornei --- dprc_commands.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 50 insertions(+), 11 deletions(-) diff --git a/dprc_commands.c b/dprc_commands.c index e1a8f16..8de2f0e 100644 --- a/dprc_commands.c +++ b/dprc_commands.c @@ -76,13 +76,16 @@ C_ASSERT(ARRAY_SIZE(dprc_sync_options) <= MAX_NUM_CMD_LINE_OPTIONS + 1); */ enum dprc_list_options { LIST_OPT_HELP = 0, + LIST_OPT_FULL_PATH, }; static struct option dprc_list_options[] = { [LIST_OPT_HELP] = { .name = "help", }, - + [LIST_OPT_FULL_PATH] = { + .name = "full-path", + }, { 0 }, }; @@ -421,17 +424,33 @@ static int cmd_dprc_sync(void) * Lists nested DPRCs inside a given DPRC, recursively */ static int list_dprc(uint32_t dprc_id, uint16_t dprc_handle, - int nesting_level, bool show_non_dprc_objects) + int nesting_level, bool show_non_dprc_objects, + char *full_path) { + char *updated_full_path = NULL; int num_child_devices; int error = 0; + int full_path_len; assert(nesting_level <= MAX_DPRC_NESTING); - for (int i = 0; i < nesting_level; i++) - printf(" "); - - printf("dprc.%u\n", dprc_id); + if (full_path) { + full_path_len = strlen(full_path); + updated_full_path = malloc(full_path_len + 10); + if (!updated_full_path) { + ERROR_PRINTF("Could not alloc memory for full-path!\n"); + return -ENOMEM; + } + if (full_path_len != 0) + sprintf(updated_full_path, "%s/dprc.%d", full_path, dprc_id); + else + sprintf(updated_full_path, "dprc.%d", dprc_id); + printf("%s\n", updated_full_path); + } else { + for (int i = 0; i < nesting_level; i++) + printf(" "); + printf("dprc.%u\n", dprc_id); + } error = dprc_get_obj_count(&restool.mc_io, 0, dprc_handle, @@ -475,8 +494,11 @@ static int list_dprc(uint32_t dprc_id, uint16_t dprc_handle, if (error < 0) goto out; - error = list_dprc(obj_desc.id, child_dprc_handle, - nesting_level + 1, show_non_dprc_objects); + error = list_dprc(obj_desc.id, + child_dprc_handle, + nesting_level + 1, + show_non_dprc_objects, + updated_full_path); error2 = dprc_close(&restool.mc_io, 0, child_dprc_handle); if (error2 < 0) { @@ -491,6 +513,9 @@ static int list_dprc(uint32_t dprc_id, uint16_t dprc_handle, } out: + if (full_path) + free(updated_full_path); + return error; } @@ -498,8 +523,14 @@ static int cmd_dprc_list(void) { static const char usage_msg[] = "\n" - "Usage: restool dprc list\n" + "Usage: restool dprc list [OPTIONS]\n" + "\n" + "OPTIONS:\n" + "--full-path\n" + " prints the dprc list in a full-path\n" + " format like: dprc.1/dprc.2\n" "\n"; + bool full_path = false; if (restool.cmd_option_mask & ONE_BIT_MASK(LIST_OPT_HELP)) { puts(usage_msg); @@ -507,6 +538,12 @@ static int cmd_dprc_list(void) return 0; } + + if (restool.cmd_option_mask & ONE_BIT_MASK(LIST_OPT_FULL_PATH)) { + restool.cmd_option_mask &= ~ONE_BIT_MASK(LIST_OPT_FULL_PATH); + full_path = true; + } + if (restool.obj_name != NULL) { ERROR_PRINTF( "Unexpected argument: \'%s\'\n\n", restool.obj_name); @@ -514,8 +551,10 @@ static int cmd_dprc_list(void) return -EINVAL; } - return list_dprc( - restool.root_dprc_id, restool.root_dprc_handle, 0, false); + return list_dprc(restool.root_dprc_id, + restool.root_dprc_handle, + 0, false, + full_path ? "" : NULL); } static int show_one_resource_type(uint16_t dprc_handle, -- 2.14.1