diff options
author | Igor Gnatenko | 2016-01-16 22:51:52 +0100 |
---|---|---|
committer | Igor Gnatenko | 2016-01-17 09:44:09 +0100 |
commit | d10fa7e6dd2b936edcfc5e6ab78687e60e57b46a (patch) | |
tree | edcff3a9bca0f529f89cf53b0d3632cde3af9226 | |
parent | fstrim: add reference to blkdiscard (diff) | |
download | kernel-qcow2-util-linux-d10fa7e6dd2b936edcfc5e6ab78687e60e57b46a.tar.gz kernel-qcow2-util-linux-d10fa7e6dd2b936edcfc5e6ab78687e60e57b46a.tar.xz kernel-qcow2-util-linux-d10fa7e6dd2b936edcfc5e6ab78687e60e57b46a.zip |
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>
-rw-r--r-- | libsmartcols/src/column.c | 7 | ||||
-rw-r--r-- | libsmartcols/src/smartcolsP.h | 2 | ||||
-rw-r--r-- | libsmartcols/src/table.c | 2 |
3 files changed, 11 insertions, 0 deletions
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; } |