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 <kzak@redhat.com>
This commit is contained in:
Karel Zak 2017-03-03 10:37:37 +01:00
parent c14224b374
commit 1765814521
1 changed files with 18 additions and 7 deletions

View File

@ -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;
}
/**