summaryrefslogtreecommitdiffstats
path: root/libsmartcols
diff options
context:
space:
mode:
authorKarel Zak2016-09-14 12:37:53 +0200
committerKarel Zak2016-09-14 12:37:53 +0200
commitfdf72798490df282e0c6b851c306bd792e370ab9 (patch)
treeb7e8bcf063a5b277c3d591f2a9b26a95dbca366d /libsmartcols
parentbuild-sys: remove dead libsmartcols sample (diff)
downloadkernel-qcow2-util-linux-fdf72798490df282e0c6b851c306bd792e370ab9.tar.gz
kernel-qcow2-util-linux-fdf72798490df282e0c6b851c306bd792e370ab9.tar.xz
kernel-qcow2-util-linux-fdf72798490df282e0c6b851c306bd792e370ab9.zip
libsmartcols: fix hidden file usage
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libsmartcols')
-rw-r--r--libsmartcols/src/table_print.c45
1 files changed, 31 insertions, 14 deletions
diff --git a/libsmartcols/src/table_print.c b/libsmartcols/src/table_print.c
index ff8a23686..2cc817c1c 100644
--- a/libsmartcols/src/table_print.c
+++ b/libsmartcols/src/table_print.c
@@ -202,7 +202,7 @@ static int is_last_column(struct libscols_column *cl)
return 1;
next = list_entry(cl->cl_columns.next, struct libscols_column, cl_columns);
- if (next && scols_column_is_hidden(next))
+ if (next && scols_column_is_hidden(next) && is_last_column(next))
return 1;
return 0;
}
@@ -425,6 +425,7 @@ static int print_data(struct libscols_table *tb,
size_t len = 0, i, width, bytes;
const char *color = NULL;
char *data, *wrapnl;
+ int is_last;
assert(tb);
assert(cl);
@@ -437,17 +438,19 @@ static int print_data(struct libscols_table *tb,
if (!data)
data = "";
+ is_last = is_last_column(cl);
+
switch (tb->format) {
case SCOLS_FMT_RAW:
fputs_nonblank(data, tb->out);
- if (!is_last_column(cl))
+ if (!is_last)
fputs(colsep(tb), tb->out);
return 0;
case SCOLS_FMT_EXPORT:
fprintf(tb->out, "%s=", scols_cell_get_data(&cl->header));
fputs_quoted(data, tb->out);
- if (!is_last_column(cl))
+ if (!is_last)
fputs(colsep(tb), tb->out);
return 0;
@@ -458,7 +461,7 @@ static int print_data(struct libscols_table *tb,
fputs("null", tb->out);
else
fputs_quoted_json(data, tb->out);
- if (!is_last_column(cl))
+ if (!is_last)
fputs(", ", tb->out);
return 0;
@@ -487,7 +490,7 @@ static int print_data(struct libscols_table *tb,
len = mbs_safe_nwidth(data, bytes, NULL);
}
- if (is_last_column(cl)
+ if (is_last
&& len < width
&& !scols_table_is_maxout(tb)
&& !scols_column_is_right(cl))
@@ -544,7 +547,7 @@ static int print_data(struct libscols_table *tb,
for (i = len; i < width; i++)
fputs(cellpadding_symbol(tb), tb->out); /* padding */
- if (is_last_column(cl))
+ if (is_last)
return 0;
if (len > width && !scols_column_is_trunc(cl))
@@ -727,7 +730,6 @@ static int print_line(struct libscols_table *tb,
while (rc == 0 && scols_table_next_column(tb, &itr, &cl) == 0) {
if (scols_column_is_hidden(cl))
continue;
-
if (cl->pending_data) {
rc = print_pending_data(tb, cl, ln, scols_line_get_cell(ln, cl->seqnum));
if (rc == 0 && cl->pending_data)
@@ -955,7 +957,7 @@ static int print_tree(struct libscols_table *tb, struct libscols_buffer *buf)
static void dbg_column(struct libscols_table *tb, struct libscols_column *cl)
{
if (scols_column_is_hidden(cl)) {
- DBG(COL, ul_debugobj(cl, "%s ignored", cl->header.data));
+ DBG(COL, ul_debugobj(cl, "%s (hidden) ignored", cl->header.data));
return;
}
@@ -1116,12 +1118,18 @@ static int recount_widths(struct libscols_table *tb, struct libscols_buffer *buf
*/
scols_reset_iter(&itr, SCOLS_ITER_FORWARD);
while (scols_table_next_column(tb, &itr, &cl) == 0) {
+ int is_last;
+
+ if (scols_column_is_hidden(cl))
+ continue;
rc = count_column_width(tb, cl, buf);
if (rc)
goto done;
- width += cl->width + (is_last_column(cl) ? 0 : 1); /* separator for non-last column */
- width_min += cl->width_min + (is_last_column(cl) ? 0 : 1);
+ is_last = is_last_column(cl);
+
+ width += cl->width + (is_last ? 0 : 1); /* separator for non-last column */
+ width_min += cl->width_min + (is_last ? 0 : 1);
extremes += cl->is_extreme;
}
@@ -1137,6 +1145,8 @@ static int recount_widths(struct libscols_table *tb, struct libscols_buffer *buf
scols_reset_iter(&itr, SCOLS_ITER_FORWARD);
while (width_min > tb->termwidth
&& scols_table_next_column(tb, &itr, &cl) == 0) {
+ if (scols_column_is_hidden(cl))
+ continue;
width_min--;
cl->width_min--;
}
@@ -1151,7 +1161,7 @@ static int recount_widths(struct libscols_table *tb, struct libscols_buffer *buf
while (scols_table_next_column(tb, &itr, &cl) == 0) {
size_t org_width;
- if (!cl->is_extreme)
+ if (!cl->is_extreme || scols_column_is_hidden(cl))
continue;
org_width = cl->width;
@@ -1175,7 +1185,7 @@ static int recount_widths(struct libscols_table *tb, struct libscols_buffer *buf
while (scols_table_next_column(tb, &itr, &cl) == 0) {
size_t add;
- if (!cl->is_extreme)
+ if (!cl->is_extreme || scols_column_is_hidden(cl))
continue;
/* this column is too large, ignore?
@@ -1203,6 +1213,8 @@ static int recount_widths(struct libscols_table *tb, struct libscols_buffer *buf
while (width < tb->termwidth) {
scols_reset_iter(&itr, SCOLS_ITER_FORWARD);
while (scols_table_next_column(tb, &itr, &cl) == 0) {
+ if (scols_column_is_hidden(cl))
+ continue;
cl->width++;
width++;
if (width == tb->termwidth)
@@ -1241,7 +1253,8 @@ static int recount_widths(struct libscols_table *tb, struct libscols_buffer *buf
DBG(TAB, ul_debugobj(cl, " checking %s (width=%zu, treeart=%zu)",
cl->header.data, cl->width, cl->width_treeart));
-
+ if (scols_column_is_hidden(cl))
+ continue;
if (width <= tb->termwidth)
break;
if (cl->width_hint > 1 && !scols_column_is_trunc(cl))
@@ -1283,6 +1296,8 @@ static int recount_widths(struct libscols_table *tb, struct libscols_buffer *buf
scols_reset_iter(&itr, SCOLS_ITER_BACKWARD);
while (scols_table_next_column(tb, &itr, &cl) == 0) {
+ if (scols_column_is_hidden(cl))
+ continue;
if (width <= tb->termwidth)
break;
if (width - cl->width < tb->termwidth) {
@@ -1387,7 +1402,9 @@ static int initialize_printing(struct libscols_table *tb, struct libscols_buffer
*/
scols_reset_iter(&itr, SCOLS_ITER_FORWARD);
while (scols_table_next_line(tb, &itr, &ln) == 0) {
- size_t sz = strlen_line(ln) + extra_bufsz;
+ size_t sz;
+
+ sz = strlen_line(ln) + extra_bufsz;
if (sz > bufsz)
bufsz = sz;
}