diff --git a/libsmartcols/src/column.c b/libsmartcols/src/column.c index 269ceea0c..b31b39063 100644 --- a/libsmartcols/src/column.c +++ b/libsmartcols/src/column.c @@ -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; } diff --git a/libsmartcols/src/smartcolsP.h b/libsmartcols/src/smartcolsP.h index 163417707..9f63c3ad1 100644 --- a/libsmartcols/src/smartcolsP.h +++ b/libsmartcols/src/smartcolsP.h @@ -89,6 +89,8 @@ struct libscols_column { struct libscols_cell header; struct list_head cl_columns; + + struct libscols_table *table; }; /* diff --git a/libsmartcols/src/table.c b/libsmartcols/src/table.c index cb4cfae0d..3360d525b 100644 --- a/libsmartcols/src/table.c +++ b/libsmartcols/src/table.c @@ -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; }