libsmartcols: reflect changinging SCOLS_FL_TREE after adding to table

When scols_column_set_flags() is called we will compare before & after
status of SCOLS_FL_TREE flag and appropriately handle tb->ntreecols.

Reference: https://github.com/karelzak/util-linux/issues/254
Signed-off-by: Igor Gnatenko <i.gnatenko.brain@gmail.com>
This commit is contained in:
Igor Gnatenko 2016-01-16 22:51:52 +01:00
parent 7ebbb9918e
commit d10fa7e6dd
3 changed files with 11 additions and 0 deletions

View File

@ -157,6 +157,13 @@ int scols_column_set_flags(struct libscols_column *cl, int flags)
if (!cl)
return -EINVAL;
if (cl->table) {
if (!(cl->flags & SCOLS_FL_TREE) && (flags & SCOLS_FL_TREE))
cl->table->ntreecols++;
else if ((cl->flags & SCOLS_FL_TREE) && !(flags & SCOLS_FL_TREE))
cl->table->ntreecols--;
}
cl->flags = flags;
return 0;
}

View File

@ -89,6 +89,8 @@ struct libscols_column {
struct libscols_cell header;
struct list_head cl_columns;
struct libscols_table *table;
};
/*

View File

@ -141,6 +141,7 @@ int scols_table_add_column(struct libscols_table *tb, struct libscols_column *cl
DBG(TAB, ul_debugobj(tb, "add column %p", cl));
list_add_tail(&cl->cl_columns, &tb->tb_columns);
cl->seqnum = tb->ncols++;
cl->table = tb;
scols_ref_column(cl);
/* TODO:
@ -173,6 +174,7 @@ int scols_table_remove_column(struct libscols_table *tb,
DBG(TAB, ul_debugobj(tb, "remove column %p", cl));
list_del_init(&cl->cl_columns);
tb->ncols--;
cl->table = NULL;
scols_unref_column(cl);
return 0;
}