]> git.tuebingen.mpg.de Git - adu.git/blobdiff - select.c
Add the --print-base-dir option.
[adu.git] / select.c
index 59755a66e9a1f119f0ffe28042ae4b8097f26d35..00b03258d5015d89a387d40ee41e7cbaca3478a2 100644 (file)
--- 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: