From: Karel Zak Date: Fri, 3 Mar 2017 09:37:37 +0000 (+0100) Subject: libsmartcols: allow to add column to already used table X-Git-Tag: v2.30-rc1~198 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1765814521bf2aba7b8c03d3ab2e3b784e1ce2c4;p=thirdparty%2Futil-linux.git libsmartcols: allow to add column to already used table Now it's impossible to add new column if the table already contains lines with data. This patch forces library to realloc cell array in the lines to accept a new column. Signed-off-by: Karel Zak --- diff --git a/libsmartcols/src/table.c b/libsmartcols/src/table.c index 4f3b13db41..f1ddacc9f8 100644 --- a/libsmartcols/src/table.c +++ b/libsmartcols/src/table.c @@ -171,7 +171,11 @@ struct libscols_cell *scols_table_get_title(struct libscols_table *tb) */ int scols_table_add_column(struct libscols_table *tb, struct libscols_column *cl) { - if (!tb || !cl || !list_empty(&tb->tb_lines) || cl->table) + struct libscols_iter itr; + struct libscols_line *ln; + int rc = 0; + + if (!tb || !cl || cl->table) return -EINVAL; if (cl->flags & SCOLS_FL_TREE) @@ -183,13 +187,20 @@ int scols_table_add_column(struct libscols_table *tb, struct libscols_column *cl cl->table = tb; scols_ref_column(cl); - /* TODO: - * - * Currently it's possible to add/remove columns only if the table is - * empty (see list_empty(tb->tb_lines) above). It would be nice to - * enlarge/reduce lines cells[] always when we add/remove a new column. + if (list_empty(&tb->tb_lines)) + return 0; + + scols_reset_iter(&itr, SCOLS_ITER_FORWARD); + + /* Realloc line cell arrays */ - return 0; + while (scols_table_next_line(tb, &itr, &ln) == 0) { + rc = scols_line_alloc_cells(ln, tb->ncols); + if (rc) + break; + } + + return rc; } /**