summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libsmartcols/src/table.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/libsmartcols/src/table.c b/libsmartcols/src/table.c
index 4f3b13db4..f1ddacc9f 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;
}
/**