]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
format-table: allow hiding a specific column
authorFrantisek Sumsal <frantisek@sumsal.cz>
Wed, 11 Mar 2020 12:27:43 +0000 (13:27 +0100)
committerFrantisek Sumsal <frantisek@sumsal.cz>
Wed, 11 Mar 2020 13:43:52 +0000 (14:43 +0100)
without having to specify the whole display map

src/shared/format-table.c
src/shared/format-table.h

index 4250130464910e521b95f09eb4415b420e8f2867..a4b412ecb9ebd2e4d645e95910a072b183504269 100644 (file)
@@ -1010,6 +1010,24 @@ int table_set_empty_string(Table *t, const char *empty) {
         return free_and_strdup(&t->empty_string, empty);
 }
 
+int table_set_display_all(Table *t) {
+        size_t allocated;
+
+        assert(t);
+
+        allocated = t->n_display_map;
+
+        if (!GREEDY_REALLOC(t->display_map, allocated, MAX(t->n_columns, allocated)))
+                return -ENOMEM;
+
+        for (size_t i = 0; i < t->n_columns; i++)
+                t->display_map[i] = i;
+
+        t->n_display_map = t->n_columns;
+
+        return 0;
+}
+
 int table_set_display(Table *t, size_t first_column, ...) {
         size_t allocated, column;
         va_list ap;
@@ -1069,6 +1087,34 @@ int table_set_sort(Table *t, size_t first_column, ...) {
         return 0;
 }
 
+int table_hide_column_from_display(Table *t, size_t column) {
+        size_t allocated, cur = 0;
+        int r;
+
+        assert(t);
+        assert(column < t->n_columns);
+
+        /* If the display map is empty, initialize it with all available columns */
+        if (!t->display_map) {
+                r = table_set_display_all(t);
+                if (r < 0)
+                        return r;
+        }
+
+        allocated = t->n_display_map;
+
+        for (size_t i = 0; i < allocated; i++) {
+                if (t->display_map[i] == column)
+                        continue;
+
+                t->display_map[cur++] = t->display_map[i];
+        }
+
+        t->n_display_map = cur;
+
+        return 0;
+}
+
 static int cell_data_compare(TableData *a, size_t index_a, TableData *b, size_t index_b) {
         assert(a);
         assert(b);
index 870a29d3856cb5c67fadc84de5824e5d21a099d5..62f1ed740d90296afe0c2f5aa3423632232aae52 100644 (file)
@@ -101,9 +101,11 @@ void table_set_header(Table *table, bool b);
 void table_set_width(Table *t, size_t width);
 void table_set_cell_height_max(Table *t, size_t height);
 int table_set_empty_string(Table *t, const char *empty);
+int table_set_display_all(Table *t);
 int table_set_display(Table *t, size_t first_column, ...);
 int table_set_sort(Table *t, size_t first_column, ...);
 int table_set_reverse(Table *t, size_t column, bool b);
+int table_hide_column_from_display(Table *t, size_t column);
 
 int table_print(Table *t, FILE *f);
 int table_format(Table *t, char **ret);