tree-wide: drop flush&check step after table printing

Almost all callers of table_print() specify stdout or NULL (equivalent
to stdout) as the output stream. Simplify things by not requiring the
the stream to be specified.

In almost all cases, the printing of the table is surrounded by normal
printfs() that don't do explicit flushing and for which we don't check
the output stream status. Let's simplify most callers and skip this
step. The reason is not so much to avoid the extra step itself, but
instead to avoid the _handling_ of the potential failure. We generally
only want to print an error message for ENOMEM and other "internal"
errors, so strictly speaking we should filter out the errors from the
stream. By skipping the flush&check step we implicitly do this.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2026-04-03 13:04:40 +02:00
parent 16a43412b9
commit 0ce5a8fb4e
44 changed files with 67 additions and 60 deletions
+1 -1
View File
@@ -37,7 +37,7 @@ static int help(void) {
program_invocation_short_name,
ansi_highlight(),
ansi_normal());
table_print(options, stdout);
table_print(options);
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, NULL);
return table_print(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, NULL);
r = table_print(table);
if (r < 0)
return r;
}
+1 -1
View File
@@ -118,7 +118,7 @@ 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, NULL);
r = table_print(t);
if (r < 0)
return table_log_print_error(r);
}
+1 -1
View File
@@ -429,7 +429,7 @@ static int show_table(Table *table, const char *word) {
if (sd_json_format_enabled(arg_json_format_flags))
r = table_print_json(table, NULL, arg_json_format_flags | SD_JSON_FORMAT_COLOR_AUTO);
else
r = table_print(table, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(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, NULL);
r = table_print(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, NULL);
return table_print(table);
}
int verb_timestamp(int argc, char *argv[], uintptr_t _data, void *userdata) {
+1 -1
View File
@@ -57,7 +57,7 @@ static int help(void) {
program_invocation_short_name,
ansi_highlight(),
ansi_normal());
table_print(options, stdout);
table_print(options);
printf("\nSee the %s for details.\n", link);
return 0;
+1 -1
View File
@@ -126,7 +126,7 @@ static int help(void) {
program_invocation_short_name,
ansi_highlight(),
ansi_normal());
table_print(options, stdout);
table_print(options);
printf("\nSee the %s for details.\n", link);
return 0;
+2 -2
View File
@@ -58,10 +58,10 @@ static int help(void) {
program_invocation_short_name,
ansi_highlight(),
ansi_normal());
table_print(verbs, stdout);
table_print(verbs);
printf("\nOptions:\n");
table_print(options, stdout);
table_print(options);
printf("\nSee the %s for details.\n", link);
return 0;
+1 -1
View File
@@ -125,7 +125,7 @@ int list_enrolled(struct crypt_device *cd) {
return 0;
}
r = table_print(t, stdout);
r = table_print(t);
if (r < 0)
return log_error_errno(r, "Failed to show slot table: %m");
+1 -1
View File
@@ -41,7 +41,7 @@ static int help(void) {
program_invocation_short_name,
ansi_highlight(),
ansi_normal());
table_print(options, stdout);
table_print(options);
printf("\nSee the %s for details.\n", link);
return 0;
+3 -3
View File
@@ -165,11 +165,11 @@ static int help(void) {
ansi_underline(),
ansi_normal());
table_print(options, stdout);
table_print(options);
printf("\n%sCommands:%s\n", ansi_underline(), ansi_normal());
table_print(commands, stdout);
table_print(commands);
printf("\nSee the %s for details.\n", link);
return 0;
@@ -1082,7 +1082,7 @@ static int action_dissect(
if (!sd_json_format_enabled(arg_json_format_flags)) {
table_set_header(t, arg_legend);
r = table_print(t, NULL);
r = table_print(t);
if (r < 0)
return table_log_print_error(r);
} else {
+2 -2
View File
@@ -51,10 +51,10 @@ static int help(void) {
program_invocation_short_name,
ansi_highlight(),
ansi_normal());
table_print(verbs, stdout);
table_print(verbs);
printf("\nOptions:\n");
table_print(options, stdout);
table_print(options);
printf("\nSee the %s for details.\n", link);
return 0;
+3 -3
View File
@@ -375,7 +375,7 @@ static int print_status_info(StatusInfo *i) {
}
}
r = table_print(table, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
@@ -748,10 +748,10 @@ static int help(void) {
program_invocation_short_name,
ansi_highlight(),
ansi_normal());
table_print(verbs, stdout);
table_print(verbs);
printf("\nOptions:\n");
table_print(options, stdout);
table_print(options);
printf("\nSee the %s for details.\n", link);
return 0;
+2 -2
View File
@@ -216,10 +216,10 @@ static int help(void) {
program_invocation_short_name,
ansi_highlight(),
ansi_normal());
table_print(verbs, stdout);
table_print(verbs);
printf("\nOptions:\n");
table_print(options, stdout);
table_print(options);
printf("\nSee the %s for details.\n", link);
return 0;
+1 -1
View File
@@ -381,7 +381,7 @@ 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, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
+1 -1
View File
@@ -144,7 +144,7 @@ static int print_status_info(StatusInfo *i) {
return table_log_add_error(r);
}
r = table_print(table, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
+3 -3
View File
@@ -716,7 +716,7 @@ 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, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
@@ -821,7 +821,7 @@ 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, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
@@ -896,7 +896,7 @@ 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, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
+1 -1
View File
@@ -262,7 +262,7 @@ static int show_table(Table *table, const char *word) {
if (OUTPUT_MODE_IS_JSON(arg_output))
r = table_print_json(table, NULL, output_mode_to_json_format_flags(arg_output) | SD_JSON_FORMAT_COLOR_AUTO);
else
r = table_print(table, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
}
+1 -1
View File
@@ -82,7 +82,7 @@ static int dump_address_labels(sd_netlink *rtnl) {
return table_log_add_error(r);
}
r = table_print(table, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
+1 -1
View File
@@ -79,7 +79,7 @@ int verb_list_links(int argc, char *argv[], uintptr_t _data, void *userdata) {
return table_log_add_error(r);
}
r = table_print(table, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
+1 -1
View File
@@ -303,7 +303,7 @@ int verb_link_lldp_status(int argc, char *argv[], uintptr_t _data, void *userdat
}
}
r = table_print(table, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
+1 -1
View File
@@ -900,7 +900,7 @@ static int link_status_one(
on_color_operational, glyph(GLYPH_BLACK_CIRCLE), off_color_operational,
info->ifindex, info->name);
r = table_print(table, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
+1 -1
View File
@@ -126,7 +126,7 @@ 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, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
+1 -1
View File
@@ -77,7 +77,7 @@ static int help(void) {
ansi_highlight(),
ansi_normal());
table_print(options, stdout);
table_print(options);
printf("\nSee the %s for details.\n", link);
return 0;
+1 -1
View File
@@ -1075,7 +1075,7 @@ static int verb_list_images(int argc, char *argv[], uintptr_t _data, void *userd
table_set_header(table, arg_legend);
r = table_print(table, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
}
+1 -1
View File
@@ -47,7 +47,7 @@ static int help(void) {
ansi_normal(),
ansi_underline(),
ansi_normal());
table_print(options, stdout);
table_print(options);
return 0;
}
+3 -3
View File
@@ -1321,7 +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, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
@@ -1890,7 +1890,7 @@ static int print_configuration(DNSConfiguration *configuration, StatusMode mode,
return table_log_add_error(r);
}
r = table_print(table, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
@@ -3097,7 +3097,7 @@ static int dump_server_state(sd_json_variant *server) {
if (r < 0)
return table_log_add_error(r);
r = table_print(table, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
+1 -1
View File
@@ -2437,7 +2437,7 @@ static int run_context_show_result(RunContext *c) {
return table_log_add_error(r);
}
r = table_print(t, stderr);
r = table_print_full(t, stderr, /* flush= */ true);
if (r < 0)
return table_log_print_error(r);
+6 -3
View File
@@ -2217,7 +2217,7 @@ int _table_sync_column_widths(size_t column, Table *a, ...) {
return r;
}
int table_print(Table *t, FILE *f) {
int table_print_full(Table *t, FILE *f, bool flush) {
size_t n_rows, *minimum_width, *maximum_width, display_columns, *requested_width,
table_minimum_width, table_maximum_width, table_requested_width, table_effective_width,
*width = NULL;
@@ -2637,6 +2637,9 @@ int table_print(Table *t, FILE *f) {
} while (more_sublines);
}
if (!flush)
return 0;
return fflush_and_check(f);
}
@@ -2652,7 +2655,7 @@ int table_format(Table *t, char **ret) {
if (!f)
return -ENOMEM;
r = table_print(t, f);
r = table_print_full(t, f, /* flush= */ true);
if (r < 0)
return r;
@@ -3141,7 +3144,7 @@ int table_print_json(Table *t, FILE *f, sd_json_format_flags_t flags) {
assert(t);
if (!sd_json_format_enabled(flags)) /* If JSON output is turned off, use regular output */
return table_print(t, f);
return table_print_full(t, f, /* flush= */ true);
if (!f)
f = stdout;
+5 -1
View File
@@ -147,7 +147,11 @@ int table_set_column_width(Table *t, size_t column, size_t width);
int _table_sync_column_widths(size_t column, Table *a, ...);
#define table_sync_column_widths(column, a, ...) _table_sync_column_widths(column, a, __VA_ARGS__, NULL)
int table_print(Table *t, FILE *f);
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_format(Table *t, char **ret);
static inline TableCell* TABLE_HEADER_CELL(size_t i) {
+1 -1
View File
@@ -1241,7 +1241,7 @@ int fido2_list_devices(void) {
}
}
r = table_print(t, stdout);
r = table_print(t);
if (r < 0) {
log_error_errno(r, "Failed to show device table: %m");
goto finish;
+1 -1
View File
@@ -128,7 +128,7 @@ int parse_signal_argument(const char *s, int *ret) {
return table_log_add_error(r);
}
r = table_print(table, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
+1 -1
View File
@@ -1816,7 +1816,7 @@ int pkcs11_list_tokens(void) {
return 0;
}
r = table_print(t, stdout);
r = table_print(t);
if (r < 0)
return log_error_errno(r, "Failed to show device table: %m");
+1 -1
View File
@@ -6584,7 +6584,7 @@ int tpm2_list_devices(bool legend, bool quiet) {
return 0;
}
r = table_print(t, stdout);
r = table_print(t);
if (r < 0)
return log_error_errno(r, "Failed to show device table: %m");
+1 -1
View File
@@ -115,7 +115,7 @@ 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, NULL);
r = table_print(table);
if (r < 0)
return log_error_errno(r, "Failed to print the table: %m");
+1 -1
View File
@@ -919,7 +919,7 @@ int output_table(Table *table) {
if (OUTPUT_MODE_IS_JSON(arg_output))
r = table_print_json(table, NULL, output_mode_to_json_format_flags(arg_output) | SD_JSON_FORMAT_COLOR_AUTO);
else
r = table_print(table, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
+1 -1
View File
@@ -890,7 +890,7 @@ TEST(table_ansi) {
"FOO BAR BAZ KKK\n"
"hallo knuerzredgreen noansi thisisgrey\n");
ASSERT_OK(table_print(table, /* f= */ NULL));
ASSERT_OK(table_print(table));
_cleanup_(sd_json_variant_unrefp) sd_json_variant *j = NULL, *jj = NULL;
+4 -4
View File
@@ -163,7 +163,7 @@ static int print_status_info(const StatusInfo *i) {
if (r < 0)
return table_log_add_error(r);
r = table_print(table, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
@@ -443,7 +443,7 @@ static int print_ntp_status_info(NTPStatusInfo *i) {
if (r < 0)
return table_log_add_error(r);
r = table_print(table, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
@@ -452,7 +452,7 @@ static int print_ntp_status_info(NTPStatusInfo *i) {
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, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
@@ -536,7 +536,7 @@ static int print_ntp_status_info(NTPStatusInfo *i) {
return table_log_add_error(r);
}
r = table_print(table, NULL);
r = table_print(table);
if (r < 0)
return table_log_print_error(r);
+1 -1
View File
@@ -82,7 +82,7 @@ static int help(void) {
ansi_normal(),
ansi_underline(),
ansi_normal());
table_print(options, stdout);
table_print(options);
printf("\nSee the %s for details.\n", link);
return 0;
+1 -1
View File
@@ -50,7 +50,7 @@ static int help(void) {
program_invocation_short_name,
ansi_highlight(),
ansi_normal());
table_print(options, stdout);
table_print(options);
printf("\nSee the %s for details.\n", link);
return 0;
+1 -1
View File
@@ -439,7 +439,7 @@ 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, NULL);
r = table_print(t);
if (r < 0)
return table_log_print_error(r);
}
+1 -1
View File
@@ -337,7 +337,7 @@ static int run(int argc, char *argv[]) {
return table_log_add_error(r);
}
r = table_print(t, stdout);
r = table_print(t);
if (r < 0)
return table_log_print_error(r);