From b54f6fb7aa4b4853997b57c1e99952068b45b678 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Tue, 3 Jun 2008 17:52:08 +0200 Subject: [PATCH] Add the --print-base-dir option. --- adu.ggo | 10 ++++++++++ select.c | 24 ++++++++++++++---------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/adu.ggo b/adu.ggo index d3dbfde..a46de25 100644 --- a/adu.ggo +++ b/adu.ggo @@ -204,6 +204,16 @@ details=" format. " +option "print-base-dir" - +#~~~~~~~~~~~~~~~~~~~~~~~~ +"whether to include the base-dir in the output" +flag off +details=" + If this flag is given, all directories printed are prefixed + with the base directory. The default is to print paths relative + to the base dir. +" + option "no-headers" - #~~~~~~~~~~~~~~~~~~~~ "supress descriptions for listings/tables" diff --git a/select.c b/select.c index 59755a6..00b0325 100644 --- a/select.c +++ b/select.c @@ -116,26 +116,30 @@ static int get_dir_name_by_number(uint64_t *dirnum, char **name) char *result = NULL, *tmp; struct osl_row *row; uint64_t val = *dirnum; - struct osl_object obj = {.data = &val, .size = sizeof(val)}; + struct osl_object obj; int ret; again: + obj.data = &val; + obj.size = sizeof(val); ret = osl(osl_get_row(dir_table, DT_NUM, &obj, &row)); if (ret < 0) goto out; - ret = osl(osl_get_object(dir_table, row, DT_NAME, &obj)); - if (ret < 0) - goto out; - if (result) { - tmp = make_message("%s/%s", (char *)obj.data, result); - free(result); - result = tmp; - } else - result = adu_strdup((char *)obj.data); ret = osl(osl_get_object(dir_table, row, DT_PARENT_NUM, &obj)); if (ret < 0) goto out; val = *(uint64_t *)obj.data; + ret = osl(osl_get_object(dir_table, row, DT_NAME, &obj)); + if (ret < 0) + goto out; + if (val || conf.print_base_dir_given) { + if (result) { + tmp = make_message("%s/%s", (char *)obj.data, result); + free(result); + result = tmp; + } else + result = adu_strdup((char *)obj.data); + } if (val) goto again; out: -- 2.39.5