The following commit will add many additional columns to the output.
Therefore the current commit adds a width for each column. It replaces
to uncondionally add a <TAB> after each column which makes the output
much wider than necessary.

Signed-off-by: Stefan Behrens <sbehr...@giantdisaster.de>
---
 btrfs-list.c | 79 +++++++++++++++++++++++++++++++++++-------------------------
 1 file changed, 46 insertions(+), 33 deletions(-)

diff --git a/btrfs-list.c b/btrfs-list.c
index a5d6e9b..70da9a3 100644
--- a/btrfs-list.c
+++ b/btrfs-list.c
@@ -50,30 +50,37 @@ static struct {
        char    *name;
        char    *column_name;
        int     need_print;
+       int     width;
 } btrfs_list_columns[] = {
        {
                .name           = "ID",
                .column_name    = "ID",
+               .width          = 6,
        },
        {
                .name           = "gen",
                .column_name    = "Gen",
+               .width          = 6,
        },
        {
                .name           = "cgen",
                .column_name    = "CGen",
+               .width          = 6,
        },
        {
                .name           = "parent",
                .column_name    = "Parent",
+               .width          = 7,
        },
        {
                .name           = "top level",
                .column_name    = "Top Level",
+               .width          = 10,
        },
        {
                .name           = "otime",
                .column_name    = "OTime",
+               .width          = 21,
        },
        {
                .name           = "parent_uuid",
@@ -82,14 +89,17 @@ static struct {
        {
                .name           = "uuid",
                .column_name    = "UUID",
+               .width          = 38,
        },
        {
                .name           = "path",
                .column_name    = "Path",
+               .width          = 0,
        },
        {
                .name           = NULL,
                .column_name    = NULL,
+               .width          = 0,
        },
 };
 
@@ -1309,29 +1319,30 @@ static int __list_subvol_fill_paths(int fd, struct 
root_lookup *root_lookup)
        return 0;
 }
 
-static void print_subvolume_column(struct root_info *subv,
-                                  enum btrfs_list_column_enum column)
+static int print_subvolume_column(struct root_info *subv,
+                                 enum btrfs_list_column_enum column)
 {
        char tstr[256];
        char uuidparse[37];
+       int width;
 
        BUG_ON(column >= BTRFS_LIST_ALL || column < 0);
 
        switch (column) {
        case BTRFS_LIST_OBJECTID:
-               printf("%llu", subv->root_id);
+               width = printf("%llu", subv->root_id);
                break;
        case BTRFS_LIST_GENERATION:
-               printf("%llu", subv->gen);
+               width = printf("%llu", subv->gen);
                break;
        case BTRFS_LIST_OGENERATION:
-               printf("%llu", subv->ogen);
+               width = printf("%llu", subv->ogen);
                break;
        case BTRFS_LIST_PARENT:
-               printf("%llu", subv->ref_tree);
+               width = printf("%llu", subv->ref_tree);
                break;
        case BTRFS_LIST_TOP_LEVEL:
-               printf("%llu", subv->top_id);
+               width = printf("%llu", subv->top_id);
                break;
        case BTRFS_LIST_OTIME:
                if (subv->otime)
@@ -1339,29 +1350,34 @@ static void print_subvolume_column(struct root_info 
*subv,
                                 localtime(&subv->otime));
                else
                        strcpy(tstr, "-");
-               printf("%s", tstr);
+               width = printf("%s", tstr);
                break;
        case BTRFS_LIST_UUID:
                if (uuid_is_null(subv->uuid))
                        strcpy(uuidparse, "-");
                else
                        uuid_unparse(subv->uuid, uuidparse);
-               printf("%s", uuidparse);
+               width = printf("%s", uuidparse);
                break;
        case BTRFS_LIST_PUUID:
                if (uuid_is_null(subv->puuid))
                        strcpy(uuidparse, "-");
                else
                        uuid_unparse(subv->puuid, uuidparse);
-               printf("%s", uuidparse);
+               width = printf("%s", uuidparse);
                break;
        case BTRFS_LIST_PATH:
                BUG_ON(!subv->full_path);
-               printf("%s", subv->full_path);
+               width = printf("%s", subv->full_path);
                break;
        default:
+               width = 0;
                break;
        }
+
+       if (width < 0)
+               width = 0;
+       return width;
 }
 
 static void print_single_volume_info_raw(struct root_info *subv, char 
*raw_prefix)
@@ -1383,18 +1399,15 @@ static void print_single_volume_info_raw(struct 
root_info *subv, char *raw_prefi
 static void print_single_volume_info_table(struct root_info *subv)
 {
        int i;
+       int width;
 
        for (i = 0; i < BTRFS_LIST_ALL; i++) {
                if (!btrfs_list_columns[i].need_print)
                        continue;
 
-               print_subvolume_column(subv, i);
-
-               if (i != BTRFS_LIST_PATH)
-                       printf("\t");
-
-               if (i == BTRFS_LIST_TOP_LEVEL)
-                       printf("\t");
+               width = print_subvolume_column(subv, i);
+               while (width++ < btrfs_list_columns[i].width)
+                       printf(" ");
        }
        printf("\n");
 }
@@ -1410,7 +1423,7 @@ static void print_single_volume_info_default(struct 
root_info *subv)
                printf("%s ", btrfs_list_columns[i].name);
                print_subvolume_column(subv, i);
 
-               if (i != BTRFS_LIST_PATH)
+               if (i != BTRFS_LIST_ALL - 1)
                        printf(" ");
        }
        printf("\n");
@@ -1419,30 +1432,30 @@ static void print_single_volume_info_default(struct 
root_info *subv)
 static void print_all_volume_info_tab_head()
 {
        int i;
-       int len;
-       char barrier[20];
+       int width;
 
        for (i = 0; i < BTRFS_LIST_ALL; i++) {
-               if (btrfs_list_columns[i].need_print)
-                       printf("%s\t", btrfs_list_columns[i].name);
+               if (!btrfs_list_columns[i].need_print)
+                       continue;
 
-               if (i == BTRFS_LIST_ALL-1)
-                       printf("\n");
+               width = printf("%s", btrfs_list_columns[i].column_name);
+               while (width++ < btrfs_list_columns[i].width)
+                       printf(" ");
        }
+       printf("\n");
 
        for (i = 0; i < BTRFS_LIST_ALL; i++) {
-               memset(barrier, 0, sizeof(barrier));
-
                if (btrfs_list_columns[i].need_print) {
-                       len = strlen(btrfs_list_columns[i].name);
-                       while (len--)
-                               strcat(barrier, "-");
+                       width = strlen(btrfs_list_columns[i].column_name);
+                       while (width--)
+                               printf("-");
 
-                       printf("%s\t", barrier);
+                       width = strlen(btrfs_list_columns[i].column_name);
+                       while (width++ < btrfs_list_columns[i].width)
+                               printf(" ");
                }
-               if (i == BTRFS_LIST_ALL-1)
-                       printf("\n");
        }
+       printf("\n");
 }
 
 static void print_all_volume_info(struct root_lookup *sorted_tree,
-- 
1.8.2.1

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to