tree-wide: print error if table_print() fails

We generally want to print an error message if table_print()
fails. Add a helper function for this and use it consistently.
This does one of the three things depending on the call site:
- a no-change reformatting of the code
- change from a custom message to the generic one
- addition of the error message where previously none was printed

In the third case, the actual use impact is very small, since the
table formatting is very unlikely to fail. But if it did, we would
often return an error without any message whatsoever, which we
never want to do.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2026-04-03 13:05:03 +02:00
parent 0ce5a8fb4e
commit 1008583c91
39 changed files with 115 additions and 130 deletions
+3 -1
View File
@@ -37,7 +37,9 @@ static int help(void) {
program_invocation_short_name,
ansi_highlight(),
ansi_normal());
table_print(options);
r = table_print_or_warn(options);
if (r < 0)
return r;
printf("\nSee the %s for details.\n", link);
return 0;
+1 -1
View File
@@ -119,7 +119,7 @@ static int test_calendar_one(usec_t n, const char *p) {
n = next;
}
return table_print(table);
return table_print_or_warn(table);
}
int verb_calendar(int argc, char *argv[], uintptr_t _data, void *userdata) {
+1 -1
View File
@@ -157,7 +157,7 @@ int verb_image_policy(int argc, char *argv[], uintptr_t _data, void *userdata) {
putc('\n', stdout);
r = table_print(table);
r = table_print_or_warn(table);
if (r < 0)
return r;
}
+2 -2
View File
@@ -118,9 +118,9 @@ static int analyze_elf(char **filenames, sd_json_format_flags_t json_flags) {
if (sd_json_format_enabled(json_flags))
sd_json_variant_dump(package_metadata, json_flags, stdout, NULL);
else {
r = table_print(t);
r = table_print_or_warn(t);
if (r < 0)
return table_log_print_error(r);
return r;
}
}
+1 -1
View File
@@ -55,7 +55,7 @@ int verb_timespan(int argc, char *argv[], uintptr_t _data, void *userdata) {
if (r < 0)
return table_log_add_error(r);
r = table_print(table);
r = table_print_or_warn(table);
if (r < 0)
return r;
+1 -1
View File
@@ -73,7 +73,7 @@ static int test_timestamp_one(const char *p) {
if (r < 0)
return table_log_add_error(r);
return table_print(table);
return table_print_or_warn(table);
}
int verb_timestamp(int argc, char *argv[], uintptr_t _data, void *userdata) {
+3 -1
View File
@@ -57,7 +57,9 @@ static int help(void) {
program_invocation_short_name,
ansi_highlight(),
ansi_normal());
table_print(options);
r = table_print_or_warn(options);
if (r < 0)
return r;
printf("\nSee the %s for details.\n", link);
return 0;
+3 -1
View File
@@ -126,7 +126,9 @@ static int help(void) {
program_invocation_short_name,
ansi_highlight(),
ansi_normal());
table_print(options);
r = table_print_or_warn(options);
if (r < 0)
return r;
printf("\nSee the %s for details.\n", link);
return 0;
+6 -2
View File
@@ -58,10 +58,14 @@ static int help(void) {
program_invocation_short_name,
ansi_highlight(),
ansi_normal());
table_print(verbs);
r = table_print_or_warn(verbs);
if (r < 0)
return r;
printf("\nOptions:\n");
table_print(options);
r = table_print_or_warn(options);
if (r < 0)
return r;
printf("\nSee the %s for details.\n", link);
return 0;
+1 -5
View File
@@ -125,9 +125,5 @@ int list_enrolled(struct crypt_device *cd) {
return 0;
}
r = table_print(t);
if (r < 0)
return log_error_errno(r, "Failed to show slot table: %m");
return 0;
return table_print_or_warn(t);
}
+3 -1
View File
@@ -41,7 +41,9 @@ static int help(void) {
program_invocation_short_name,
ansi_highlight(),
ansi_normal());
table_print(options);
r = table_print_or_warn(options);
if (r < 0)
return r;
printf("\nSee the %s for details.\n", link);
return 0;
+8 -4
View File
@@ -165,11 +165,15 @@ static int help(void) {
ansi_underline(),
ansi_normal());
table_print(options);
r = table_print_or_warn(options);
if (r < 0)
return r;
printf("\n%sCommands:%s\n", ansi_underline(), ansi_normal());
table_print(commands);
r = table_print_or_warn(commands);
if (r < 0)
return r;
printf("\nSee the %s for details.\n", link);
return 0;
@@ -1082,9 +1086,9 @@ static int action_dissect(
if (!sd_json_format_enabled(arg_json_format_flags)) {
table_set_header(t, arg_legend);
r = table_print(t);
r = table_print_or_warn(t);
if (r < 0)
return table_log_print_error(r);
return r;
} else {
_cleanup_(sd_json_variant_unrefp) sd_json_variant *jt = NULL;
+6 -2
View File
@@ -51,10 +51,14 @@ static int help(void) {
program_invocation_short_name,
ansi_highlight(),
ansi_normal());
table_print(verbs);
r = table_print_or_warn(verbs);
if (r < 0)
return r;
printf("\nOptions:\n");
table_print(options);
r = table_print_or_warn(options);
if (r < 0)
return r;
printf("\nSee the %s for details.\n", link);
return 0;
+7 -7
View File
@@ -375,11 +375,7 @@ static int print_status_info(StatusInfo *i) {
}
}
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
return 0;
return table_print_or_warn(table);
}
static int get_one_name(sd_bus *bus, const char* attr, char **ret) {
@@ -748,10 +744,14 @@ static int help(void) {
program_invocation_short_name,
ansi_highlight(),
ansi_normal());
table_print(verbs);
r = table_print_or_warn(verbs);
if (r < 0)
return r;
printf("\nOptions:\n");
table_print(options);
r = table_print_or_warn(options);
if (r < 0)
return r;
printf("\nSee the %s for details.\n", link);
return 0;
+6 -2
View File
@@ -216,10 +216,14 @@ static int help(void) {
program_invocation_short_name,
ansi_highlight(),
ansi_normal());
table_print(verbs);
r = table_print_or_warn(verbs);
if (r < 0)
return r;
printf("\nOptions:\n");
table_print(options);
r = table_print_or_warn(options);
if (r < 0)
return r;
printf("\nSee the %s for details.\n", link);
return 0;
+2 -6
View File
@@ -381,14 +381,10 @@ static int action_summary(sd_varlink *link) {
if (table_isempty(table))
return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "No well-known IMDS data available.");
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
return 0;
return table_print_or_warn(table);
}
static const char *detect_json_object(const char *text) {
static const char* detect_json_object(const char *text) {
assert(text);
/* Checks if the provided text looks like a JSON object. It checks if the first non-whitespace
+1 -5
View File
@@ -144,11 +144,7 @@ static int print_status_info(StatusInfo *i) {
return table_log_add_error(r);
}
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
return 0;
return table_print_or_warn(table);
}
static int verb_show_status(int argc, char *argv[], uintptr_t _data, void *userdata) {
+6 -6
View File
@@ -716,9 +716,9 @@ static int print_session_status_info(sd_bus *bus, const char *path) {
/* We don't use the table to show the header, in order to make the width of the column stable. */
printf("%s%s - %s (" UID_FMT ")%s\n", ansi_highlight(), i.id, i.name, i.uid, ansi_normal());
r = table_print(table);
r = table_print_or_warn(table);
if (r < 0)
return table_log_print_error(r);
return r;
if (i.scope) {
show_unit_cgroup(bus, i.scope, i.leader, /* prefix= */ strrepa(" ", STRLEN("Display: ")));
@@ -821,9 +821,9 @@ static int print_user_status_info(sd_bus *bus, const char *path) {
printf("%s%s (" UID_FMT ")%s\n", ansi_highlight(), i.name, i.uid, ansi_normal());
r = table_print(table);
r = table_print_or_warn(table);
if (r < 0)
return table_log_print_error(r);
return r;
if (i.slice) {
show_unit_cgroup(bus, i.slice, /* leader= */ 0, /* prefix= */ strrepa(" ", STRLEN("Sessions: ")));
@@ -896,9 +896,9 @@ static int print_seat_status_info(sd_bus *bus, const char *path) {
printf("%s%s%s\n", ansi_highlight(), i.id, ansi_normal());
r = table_print(table);
r = table_print_or_warn(table);
if (r < 0)
return table_log_print_error(r);
return r;
if (arg_transport == BUS_TRANSPORT_LOCAL) {
unsigned c = MAX(LESS_BY(columns(), 21U), 10U);
+1 -5
View File
@@ -82,11 +82,7 @@ static int dump_address_labels(sd_netlink *rtnl) {
return table_log_add_error(r);
}
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
return 0;
return table_print_or_warn(table);
}
int verb_list_address_labels(int argc, char *argv[], uintptr_t _data, void *userdata) {
+2 -2
View File
@@ -79,9 +79,9 @@ int verb_list_links(int argc, char *argv[], uintptr_t _data, void *userdata) {
return table_log_add_error(r);
}
r = table_print(table);
r = table_print_or_warn(table);
if (r < 0)
return table_log_print_error(r);
return r;
if (arg_legend)
printf("\n%i links listed.\n", c);
+2 -2
View File
@@ -303,9 +303,9 @@ int verb_link_lldp_status(int argc, char *argv[], uintptr_t _data, void *userdat
}
}
r = table_print(table);
r = table_print_or_warn(table);
if (r < 0)
return table_log_print_error(r);
return r;
if (arg_legend) {
lldp_capabilities_legend(all);
+2 -2
View File
@@ -900,9 +900,9 @@ static int link_status_one(
on_color_operational, glyph(GLYPH_BLACK_CIRCLE), off_color_operational,
info->ifindex, info->name);
r = table_print(table);
r = table_print_or_warn(table);
if (r < 0)
return table_log_print_error(r);
return r;
return show_logs(info->ifindex, info->name);
}
+2 -2
View File
@@ -126,9 +126,9 @@ int system_status(sd_netlink *rtnl, sd_hwdb *hwdb) {
on_color_operational, glyph(GLYPH_BLACK_CIRCLE), off_color_operational,
strna(netifs_joined));
r = table_print(table);
r = table_print_or_warn(table);
if (r < 0)
return table_log_print_error(r);
return r;
return show_logs(0, NULL);
}
+3 -1
View File
@@ -77,7 +77,9 @@ static int help(void) {
ansi_highlight(),
ansi_normal());
table_print(options);
r = table_print_or_warn(options);
if (r < 0)
return r;
printf("\nSee the %s for details.\n", link);
return 0;
+2 -2
View File
@@ -1075,9 +1075,9 @@ static int verb_list_images(int argc, char *argv[], uintptr_t _data, void *userd
table_set_header(table, arg_legend);
r = table_print(table);
r = table_print_or_warn(table);
if (r < 0)
return table_log_print_error(r);
return r;
}
if (arg_legend) {
+1 -2
View File
@@ -47,9 +47,8 @@ static int help(void) {
ansi_normal(),
ansi_underline(),
ansi_normal());
table_print(options);
return 0;
return table_print_or_warn(options);
}
static int parse_argv(int argc, char *argv[]) {
+4 -12
View File
@@ -1321,11 +1321,7 @@ static int verb_show_statistics(int argc, char *argv[], uintptr_t _data, void *u
if (r < 0)
return table_log_add_error(r);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
return 0;
return table_print_or_warn(table);
}
static int verb_reset_statistics(int argc, char *argv[], uintptr_t _data, void *userdata) {
@@ -1890,9 +1886,9 @@ static int print_configuration(DNSConfiguration *configuration, StatusMode mode,
return table_log_add_error(r);
}
r = table_print(table);
r = table_print_or_warn(table);
if (r < 0)
return table_log_print_error(r);
return r;
if (empty_line)
*empty_line = true;
@@ -3097,11 +3093,7 @@ static int dump_server_state(sd_json_variant *server) {
if (r < 0)
return table_log_add_error(r);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
return 0;
return table_print_or_warn(table);
}
static int verb_show_server_state(int argc, char *argv[], uintptr_t _data, void *userdata) {
+9
View File
@@ -2643,6 +2643,15 @@ int table_print_full(Table *t, FILE *f, bool flush) {
return fflush_and_check(f);
}
int table_print_or_warn(Table *t) {
int r;
r = table_print(t);
if (r < 0)
return table_log_print_error(r);
return 0;
}
int table_format(Table *t, char **ret) {
_cleanup_(memstream_done) MemStream m = {};
FILE *f;
+1
View File
@@ -151,6 +151,7 @@ int table_print_full(Table *t, FILE *f, bool flush);
static inline int table_print(Table *t) {
return table_print_full(t, /* f= */ NULL, /* flush= */ false);
}
int table_print_or_warn(Table *t);
int table_format(Table *t, char **ret);
+2 -4
View File
@@ -1241,11 +1241,9 @@ int fido2_list_devices(void) {
}
}
r = table_print(t);
if (r < 0) {
log_error_errno(r, "Failed to show device table: %m");
r = table_print_or_warn(t);
if (r < 0)
goto finish;
}
if (!table_isempty(t))
printf("\n"
+1 -5
View File
@@ -128,11 +128,7 @@ int parse_signal_argument(const char *s, int *ret) {
return table_log_add_error(r);
}
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
return 0;
return table_print_or_warn(table);
}
r = signal_from_string(s);
+1 -5
View File
@@ -1816,11 +1816,7 @@ int pkcs11_list_tokens(void) {
return 0;
}
r = table_print(t);
if (r < 0)
return log_error_errno(r, "Failed to show device table: %m");
return 0;
return table_print_or_warn(t);
#else
return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
"PKCS#11 tokens not supported on this build.");
+1 -5
View File
@@ -6584,11 +6584,7 @@ int tpm2_list_devices(bool legend, bool quiet) {
return 0;
}
r = table_print(t);
if (r < 0)
return log_error_errno(r, "Failed to show device table: %m");
return 0;
return table_print_or_warn(t);
#else
return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
"TPM2 not supported on this build.");
+2 -2
View File
@@ -115,9 +115,9 @@ static int output_jobs_list(sd_bus *bus, const struct job_info* jobs, unsigned n
output_waiting_jobs(bus, table, j->id, "GetJobBefore", "\twaiting for job");
}
r = table_print(table);
r = table_print_or_warn(table);
if (r < 0)
return log_error_errno(r, "Failed to print the table: %m");
return r;
if (arg_legend != 0) {
on = ansi_highlight();
+5 -17
View File
@@ -163,9 +163,9 @@ static int print_status_info(const StatusInfo *i) {
if (r < 0)
return table_log_add_error(r);
r = table_print(table);
r = table_print_or_warn(table);
if (r < 0)
return table_log_print_error(r);
return r;
if (i->rtc_local) {
fflush(stdout);
@@ -443,20 +443,12 @@ static int print_ntp_status_info(NTPStatusInfo *i) {
if (r < 0)
return table_log_add_error(r);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
return 0;
return table_print_or_warn(table);
}
if (i->dest < i->origin || i->trans < i->recv || i->dest - i->origin < i->trans - i->recv) {
log_error("Invalid NTP response");
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
return 0;
return table_print_or_warn(table);
}
delay = (i->dest - i->origin) - (i->trans - i->recv);
@@ -536,11 +528,7 @@ static int print_ntp_status_info(NTPStatusInfo *i) {
return table_log_add_error(r);
}
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
return 0;
return table_print_or_warn(table);
}
static int map_server_address(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata) {
+3 -1
View File
@@ -82,7 +82,9 @@ static int help(void) {
ansi_normal(),
ansi_underline(),
ansi_normal());
table_print(options);
r = table_print_or_warn(options);
if (r < 0)
return r;
printf("\nSee the %s for details.\n", link);
return 0;
+3 -1
View File
@@ -50,7 +50,9 @@ static int help(void) {
program_invocation_short_name,
ansi_highlight(),
ansi_normal());
table_print(options);
r = table_print_or_warn(options);
if (r < 0)
return r;
printf("\nSee the %s for details.\n", link);
return 0;
+5 -9
View File
@@ -416,6 +416,8 @@ static int verb_info(int argc, char *argv[], uintptr_t _data, void *userdata) {
if (streq_ptr(argv[0], "list-interfaces")) {
STRV_FOREACH(i, data.interfaces)
puts(*i);
return 0;
} else {
_cleanup_(table_unrefp) Table *t = NULL;
@@ -439,20 +441,14 @@ static int verb_info(int argc, char *argv[], uintptr_t _data, void *userdata) {
if (r < 0)
return table_log_add_error(r);
r = table_print(t);
if (r < 0)
return table_log_print_error(r);
return table_print_or_warn(t);
}
} else {
sd_json_variant *v;
v = streq_ptr(argv[0], "list-interfaces") ?
sd_json_variant *v = streq_ptr(argv[0], "list-interfaces") ?
sd_json_variant_by_key(reply, "interfaces") : reply;
sd_json_variant_dump(v, arg_json_format_flags, stdout, NULL);
return sd_json_variant_dump(v, arg_json_format_flags, stdout, NULL);
}
return 0;
}
static size_t break_columns(void) {
+2 -2
View File
@@ -337,9 +337,9 @@ static int run(int argc, char *argv[]) {
return table_log_add_error(r);
}
r = table_print(t);
r = table_print_or_warn(t);
if (r < 0)
return table_log_print_error(r);
return r;
break;
}