123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- From 6039bd1b7e5e71a0a171406cf980d2d61a6e79d4 Mon Sep 17 00:00:00 2001
- From: Ioana Ciornei <[email protected]>
- 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 <[email protected]>
- ---
- 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
|