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 <sbehrens@xxxxxxxxxxxxxxxx>
---
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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html