]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
shared/format-table: use enum instead of Table.empty_string
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 20 Sep 2022 18:38:27 +0000 (20:38 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 22 Sep 2022 08:16:05 +0000 (10:16 +0200)
All users were setting this to some static string (usually "-"), so let's
simplify things by not doing strdup, but instead limiting callers to a fixed
set of values. In preparation for the next commit, the function is renamed from
"empty" to "replacement", because it'll be used for more than empty fields. I
didn't do the whole string-table setup, because it's all used internally in one
file and this way we can immediately assert if an invalid value is passed in.

Some callers were (void)ing the error, others were ignoring it, and others
propagating. It's nicer to remove the boilerplate.

16 files changed:
src/busctl/busctl.c
src/coredump/coredumpctl.c
src/dissect/dissect.c
src/hostname/hostnamectl.c
src/locale/localectl.c
src/machine/machinectl.c
src/network/networkctl.c
src/shared/format-table.c
src/shared/format-table.h
src/sysext/sysext.c
src/systemctl/systemctl-list-jobs.c
src/systemctl/systemctl-list-machines.c
src/systemctl/systemctl-list-unit-files.c
src/systemctl/systemctl-list-units.c
src/sysupdate/sysupdate.c
src/userdb/userdbctl.c

index 90e42a21da4b218a03caf9f8ad3b5241287e7ae7..f57a5d605d8d46c30fba1804664e9eb41d3cc055 100644 (file)
@@ -209,9 +209,7 @@ static int list_bus_names(int argc, char **argv, void *userdata) {
         if (r < 0)
                 return log_error_errno(r, "Failed to set alignment: %m");
 
-        r = table_set_empty_string(table, "-");
-        if (r < 0)
-                return log_error_errno(r, "Failed to set empty string: %m");
+        table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
 
         r = table_set_sort(table, (size_t) COLUMN_NAME);
         if (r < 0)
index 6557e98f0aee9108e835838055112f40cdc2eecb..da0b591c484f4ff985b412f825cbcebc438598ef 100644 (file)
@@ -822,7 +822,7 @@ static int dump_list(int argc, char **argv, void *userdata) {
                 (void) table_set_align_percent(t, TABLE_HEADER_CELL(3), 100);
                 (void) table_set_align_percent(t, TABLE_HEADER_CELL(7), 100);
 
-                (void) table_set_empty_string(t, "-");
+                table_set_ersatz_string(t, TABLE_ERSATZ_DASH);
         } else
                 pager_open(arg_pager_flags);
 
index b075222ec5622a9bb389596548429abcbb7e389e..67b0c42124c85dbf57682b3b7f5f05cb2033d780 100644 (file)
@@ -570,7 +570,7 @@ static int action_dissect(DissectedImage *m, LoopDevice *d) {
         if (!t)
                 return log_oom();
 
-        (void) table_set_empty_string(t, "-");
+        table_set_ersatz_string(t, TABLE_ERSATZ_DASH);
         (void) table_set_align_percent(t, table_get_cell(t, 0, 7), 100);
 
         for (PartitionDesignator i = 0; i < _PARTITION_DESIGNATOR_MAX; i++) {
index abaea404a745285f89bef5b9a66bc83579ce1e08..bb014973fbe78eaf4435a6416c7ee4834e91ff44 100644 (file)
@@ -92,9 +92,7 @@ static int print_status_info(StatusInfo *i) {
 
         table_set_header(table, false);
 
-        r = table_set_empty_string(table, "(unset)");
-        if (r < 0)
-                return log_oom();
+        table_set_ersatz_string(table, TABLE_ERSATZ_UNSET);
 
         r = table_add_many(table,
                            TABLE_STRING, "Static hostname:",
index b52a56be71d24109a4567675b6f1199e12f2e8c4..c23f1fa3f67063cc9d8bb20d06d48631808e0c66 100644 (file)
@@ -81,9 +81,7 @@ static int print_status_info(StatusInfo *i) {
 
         table_set_header(table, false);
 
-        r = table_set_empty_string(table, "(unset)");
-        if (r < 0)
-                return log_oom();
+        table_set_ersatz_string(table, TABLE_ERSATZ_UNSET);
 
         if (!strv_isempty(kernel_locale)) {
                 log_warning("Warning: Settings on kernel command line override system locale settings in /etc/locale.conf.");
index d05b4101cc941127adfaef435bf2c4a27714a2d3..39e6f18606c0047acd1b1aec825f605da7d4284c 100644 (file)
@@ -277,7 +277,7 @@ static int list_machines(int argc, char *argv[], void *userdata) {
         if (!table)
                 return log_oom();
 
-        table_set_empty_string(table, "-");
+        table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
         if (!arg_full && arg_max_addresses != ALL_ADDRESSES)
                 table_set_cell_height_max(table, arg_max_addresses);
 
index f69cde7e4deb9de3e4189718f89cede498408567..5189ff2280bb6d1e8f49935e77bed4b6660b2490 100644 (file)
@@ -817,8 +817,7 @@ static int list_links(int argc, char *argv[], void *userdata) {
                 table_set_width(table, 0);
 
         table_set_header(table, arg_legend);
-        if (table_set_empty_string(table, "-") < 0)
-                return log_oom();
+        table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
 
         assert_se(cell = table_get_cell(table, 0, 0));
         (void) table_set_minimum_width(table, cell, 3);
index 47bc90b9fc3209bc78a4b218502a43077a024a44..3572eb2a3233ea9a63bb9f67c2d88607dea0176a 100644 (file)
@@ -133,6 +133,8 @@ struct Table {
         size_t n_cells;
 
         bool header;   /* Whether to show the header row? */
+        TableErsatz ersatz; /* What to show when we have an empty cell or an invalid value that cannot be rendered. */
+
         size_t width;  /* If == 0 format this as wide as necessary. If SIZE_MAX format this to console
                         * width or less wide, but not wider. Otherwise the width to format this table in. */
         size_t cell_height_max; /* Maximum number of lines per cell. (If there are more, ellipsis is shown. If SIZE_MAX then no limit is set, the default. == 0 is not allowed.) */
@@ -149,8 +151,6 @@ struct Table {
         size_t n_json_fields;
 
         bool *reverse_map;
-
-        char *empty_string;
 };
 
 Table *table_new_raw(size_t n_columns) {
@@ -167,6 +167,7 @@ Table *table_new_raw(size_t n_columns) {
                 .header = true,
                 .width = SIZE_MAX,
                 .cell_height_max = SIZE_MAX,
+                .ersatz = TABLE_ERSATZ_EMPTY,
         };
 
         return TAKE_PTR(t);
@@ -242,7 +243,6 @@ Table *table_unref(Table *t) {
         free(t->display_map);
         free(t->sort_map);
         free(t->reverse_map);
-        free(t->empty_string);
 
         for (size_t i = 0; i < t->n_json_fields; i++)
                 free(t->json_fields[i]);
@@ -1089,10 +1089,26 @@ void table_set_cell_height_max(Table *t, size_t height) {
         t->cell_height_max = height;
 }
 
-int table_set_empty_string(Table *t, const char *empty) {
+void table_set_ersatz_string(Table *t, TableErsatz ersatz) {
         assert(t);
+        assert(ersatz >= 0 && ersatz < _TABLE_ERSATZ_MAX);
+
+        t->ersatz = ersatz;
+}
 
-        return free_and_strdup(&t->empty_string, empty);
+static const char* table_ersatz_string(const Table *t) {
+        switch (t->ersatz) {
+        case TABLE_ERSATZ_EMPTY:
+                return "";
+        case TABLE_ERSATZ_DASH:
+                return "-";
+        case TABLE_ERSATZ_UNSET:
+                return "(unset)";
+        case TABLE_ERSATZ_NA:
+                return "n/a";
+        default:
+                assert_not_reached();
+        }
 }
 
 static int table_set_display_all(Table *t) {
@@ -1397,7 +1413,7 @@ static const char *table_data_format(Table *t, TableData *d, bool avoid_uppercas
 
         switch (d->type) {
         case TABLE_EMPTY:
-                return strempty(t->empty_string);
+                return table_ersatz_string(t);
 
         case TABLE_STRING:
         case TABLE_PATH:
@@ -1418,7 +1434,7 @@ static const char *table_data_format(Table *t, TableData *d, bool avoid_uppercas
 
         case TABLE_STRV:
                 if (strv_isempty(d->strv))
-                        return strempty(t->empty_string);
+                        return table_ersatz_string(t);
 
                 d->formatted = strv_join(d->strv, "\n");
                 if (!d->formatted)
@@ -1427,7 +1443,7 @@ static const char *table_data_format(Table *t, TableData *d, bool avoid_uppercas
 
         case TABLE_STRV_WRAPPED: {
                 if (strv_isempty(d->strv))
-                        return strempty(t->empty_string);
+                        return table_ersatz_string(t);
 
                 char *buf = format_strv_width(d->strv, column_width);
                 if (!buf)
index 6f60669406987ce8f98e8f4876656d65f714fa60..3a7c2774b6285c2a77b03acf1e166d81551fe956 100644 (file)
@@ -64,6 +64,14 @@ typedef enum TableDataType {
         _TABLE_DATA_TYPE_INVALID = -EINVAL,
 } TableDataType;
 
+typedef enum TableErsatz {
+        TABLE_ERSATZ_EMPTY,
+        TABLE_ERSATZ_DASH,
+        TABLE_ERSATZ_UNSET,
+        TABLE_ERSATZ_NA,
+        _TABLE_ERSATZ_MAX,
+} TableErsatz;
+
 typedef struct Table Table;
 typedef struct TableCell TableCell;
 
@@ -102,7 +110,7 @@ int table_add_many_internal(Table *t, TableDataType first_type, ...);
 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);
+void table_set_ersatz_string(Table *t, TableErsatz ersatz);
 int table_set_display_internal(Table *t, size_t first_column, ...);
 #define table_set_display(...) table_set_display_internal(__VA_ARGS__, SIZE_MAX)
 int table_set_sort_internal(Table *t, size_t first_column, ...);
index e45fa61640c90f8fc371019c8c6ba6d73d15c6cd..3dd37b30ca0058e2b8260b63c5065a95cd0a15be 100644 (file)
@@ -166,7 +166,7 @@ static int verb_status(int argc, char **argv, void *userdata) {
         if (!t)
                 return log_oom();
 
-        (void) table_set_empty_string(t, "-");
+        table_set_ersatz_string(t, TABLE_ERSATZ_DASH);
 
         STRV_FOREACH(p, arg_hierarchies) {
                 _cleanup_free_ char *resolved = NULL, *f = NULL, *buf = NULL;
index f9eba2368339d81d9a3a532e42db591841c209ea..a752173e4ecf52551df28d6550b6cc3fdb95dfa1 100644 (file)
@@ -83,7 +83,7 @@ static int output_jobs_list(sd_bus *bus, const struct job_info* jobs, unsigned n
         if (arg_full)
                 table_set_width(table, 0);
 
-        (void) table_set_empty_string(table, "-");
+        table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
 
         for (const struct job_info *j = jobs; j < jobs + n; j++) {
                 if (streq(j->state, "running"))
index 121d5ab9ce99a4284339f1fc8de08dfcbacb5bae..4407d2598a94027357e4f7d4ed870f6de53f868a 100644 (file)
@@ -171,7 +171,7 @@ static int output_machines_list(struct machine_info *machine_infos, unsigned n)
         if (arg_full)
                 table_set_width(table, 0);
 
-        (void) table_set_empty_string(table, "-");
+        table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
 
         for (struct machine_info *m = machine_infos; m < machine_infos + n; m++) {
                 _cleanup_free_ char *mname = NULL;
index fa7a789b282b1bc3d6267895791ca323fdacaa9e..96b22041f4a1bc308c2c874ab444b6575e775173 100644 (file)
@@ -62,7 +62,7 @@ static int output_unit_file_list(const UnitFileList *units, unsigned c) {
         if (arg_full)
                 table_set_width(table, 0);
 
-        (void) table_set_empty_string(table, "-");
+        table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
 
         for (const UnitFileList *u = units; u < units + c; u++) {
                 const char *on_underline = NULL, *on_unit_color = NULL, *id;
index 5a1311f5ea800e45ff2aaae79338390f4b913bbf..6bfaf97236db76d1ef0eb2f40bda240d2c92e8ac 100644 (file)
@@ -120,7 +120,7 @@ static int output_units_list(const UnitInfo *unit_infos, size_t c) {
         if (arg_full)
                 table_set_width(table, 0);
 
-        (void) table_set_empty_string(table, "-");
+        table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
 
         for (const UnitInfo *u = unit_infos; unit_infos && (size_t) (u - unit_infos) < c; u++) {
                 _cleanup_free_ char *j = NULL;
@@ -381,7 +381,7 @@ static int output_sockets_list(struct socket_info *socket_infos, size_t cs) {
         if (arg_full)
                 table_set_width(table, 0);
 
-        (void) table_set_empty_string(table, "-");
+        table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
 
         for (struct socket_info *s = socket_infos; s < socket_infos + cs; s++) {
                 _cleanup_free_ char *j = NULL;
@@ -612,7 +612,7 @@ static int output_timers_list(struct timer_info *timer_infos, size_t n) {
         if (arg_full)
                 table_set_width(table, 0);
 
-        (void) table_set_empty_string(table, "-");
+        table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
 
         for (struct timer_info *t = timer_infos; t < timer_infos + n; t++) {
                 _cleanup_free_ char *j = NULL, *activates = NULL;
@@ -844,7 +844,7 @@ static int output_automounts_list(struct automount_info *infos, size_t n_infos)
         if (arg_full)
                 table_set_width(table, 0);
 
-        (void) table_set_empty_string(table, "-");
+        table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
 
         for (struct automount_info *info = infos; info < infos + n_infos; info++) {
                 _cleanup_free_ char *j = NULL;
index 7dcfac126189f26897d3cb79a17e1a55dd1bc5f4..8a4e1b54779405785add3fc10065ec3f7be5c748 100644 (file)
@@ -510,7 +510,7 @@ static int context_show_version(Context *c, const char *version) {
         (void) table_set_align_percent(t, table_get_cell(t, 0, 6), 100);
         (void) table_set_align_percent(t, table_get_cell(t, 0, 7), 100);
         (void) table_set_align_percent(t, table_get_cell(t, 0, 8), 100);
-        (void) table_set_empty_string(t, "-");
+        table_set_ersatz_string(t, TABLE_ERSATZ_DASH);
 
         /* Determine if the target will make use of partition/fs attributes for any of the transfers */
         for (size_t n = 0; n < c->n_transfers; n++) {
index 5e9bce3bae35321f6a2f8a3ad42f95dc001f680e..6afec0cda2fae6db391c8f5eb4ea6c4f4295d6f7 100644 (file)
@@ -354,7 +354,7 @@ static int display_user(int argc, char *argv[], void *userdata) {
 
                 (void) table_set_align_percent(table, table_get_cell(table, 0, 3), 100);
                 (void) table_set_align_percent(table, table_get_cell(table, 0, 4), 100);
-                (void) table_set_empty_string(table, "-");
+                table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
                 (void) table_set_sort(table, (size_t) 3, (size_t) 8);
                 (void) table_set_display(table, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3, (size_t) 4, (size_t) 5, (size_t) 6, (size_t) 7);
         }
@@ -657,7 +657,7 @@ static int display_group(int argc, char *argv[], void *userdata) {
                         return log_oom();
 
                 (void) table_set_align_percent(table, table_get_cell(table, 0, 3), 100);
-                (void) table_set_empty_string(table, "-");
+                table_set_ersatz_string(table, TABLE_ERSATZ_DASH);
                 (void) table_set_sort(table, (size_t) 3, (size_t) 5);
                 (void) table_set_display(table, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3, (size_t) 4);
         }