analyze: optimize table creation by using table_add_many()

This commit is contained in:
Yu Watanabe 2020-01-10 18:23:21 +09:00
parent d8aedafb57
commit 9c46b437fc
2 changed files with 82 additions and 140 deletions

View File

@ -1484,7 +1484,6 @@ static int assess(const struct security_info *info, Table *overview_table, Analy
if (details_table) {
const char *checkmark, *description, *color = NULL;
TableCell *cell;
if (badness == UINT64_MAX) {
checkmark = " ";
@ -1507,13 +1506,12 @@ static int assess(const struct security_info *info, Table *overview_table, Analy
if (d)
description = d;
r = table_add_cell_full(details_table, &cell, TABLE_STRING, checkmark, 1, 1, 0, 0, 0);
if (r < 0)
return log_error_errno(r, "Failed to add cell to table: %m");
if (color)
(void) table_set_color(details_table, cell, color);
r = table_add_many(details_table,
TABLE_STRING, checkmark,
TABLE_SET_MINIMUM_WIDTH, 1,
TABLE_SET_MAXIMUM_WIDTH, 1,
TABLE_SET_ELLIPSIZE_PERCENT, 0,
TABLE_SET_COLOR, color,
TABLE_STRING, a->id, TABLE_SET_URL, a->url,
TABLE_STRING, description,
TABLE_UINT64, a->weight, TABLE_SET_ALIGN_PERCENT, 100,
@ -1521,7 +1519,7 @@ static int assess(const struct security_info *info, Table *overview_table, Analy
TABLE_UINT64, a->range, TABLE_SET_ALIGN_PERCENT, 100,
TABLE_EMPTY, TABLE_SET_ALIGN_PERCENT, 100);
if (r < 0)
return log_error_errno(r, "Failed to add cells to table: %m");
return table_log_add_error(r);
}
}
@ -1597,35 +1595,26 @@ static int assess(const struct security_info *info, Table *overview_table, Analy
if (overview_table) {
char buf[DECIMAL_STR_MAX(uint64_t) + 1 + DECIMAL_STR_MAX(uint64_t) + 1];
TableCell *cell;
_cleanup_free_ char *url = NULL;
r = table_add_cell(overview_table, &cell, TABLE_STRING, info->id);
if (r < 0)
return log_error_errno(r, "Failed to add cell to table: %m");
if (info->fragment_path) {
_cleanup_free_ char *url = NULL;
r = file_url_from_path(info->fragment_path, &url);
if (r < 0)
return log_error_errno(r, "Failed to generate URL from path: %m");
(void) table_set_url(overview_table, cell, url);
}
xsprintf(buf, "%" PRIu64 ".%" PRIu64, exposure / 10, exposure % 10);
r = table_add_cell(overview_table, &cell, TABLE_STRING, buf);
if (r < 0)
return log_error_errno(r, "Failed to add cell to table: %m");
(void) table_set_align_percent(overview_table, cell, 100);
r = table_add_cell(overview_table, &cell, TABLE_STRING, badness_table[i].name);
r = table_add_many(overview_table,
TABLE_STRING, info->id,
TABLE_SET_URL, url,
TABLE_STRING, buf,
TABLE_SET_ALIGN_PERCENT, 100,
TABLE_STRING, badness_table[i].name,
TABLE_SET_COLOR, strempty(badness_table[i].color),
TABLE_STRING, special_glyph(badness_table[i].smiley));
if (r < 0)
return log_error_errno(r, "Failed to add cell to table: %m");
(void) table_set_color(overview_table, cell, strempty(badness_table[i].color));
r = table_add_cell(overview_table, NULL, TABLE_STRING, special_glyph(badness_table[i].smiley));
if (r < 0)
return log_error_errno(r, "Failed to add cell to table: %m");
return table_log_add_error(r);
}
return 0;

View File

@ -1113,13 +1113,11 @@ static int analyze_blame(int argc, char *argv[], void *userdata) {
if (u->time <= 0)
continue;
r = table_add_cell(table, NULL, TABLE_TIMESPAN_MSEC, &u->time);
r = table_add_many(table,
TABLE_TIMESPAN_MSEC, &u->time,
TABLE_STRING, u->name);
if (r < 0)
return r;
r = table_add_cell(table, NULL, TABLE_STRING, u->name);
if (r < 0)
return r;
return table_log_add_error(r);
}
(void) pager_open(arg_pager_flags);
@ -1630,7 +1628,7 @@ static int dump_exit_status(int argc, char *argv[], void *userdata) {
TABLE_INT, (int) i,
TABLE_STRING, exit_status_class(i));
if (r < 0)
return r;
return table_log_add_error(r);
}
else
for (int i = 1; i < argc; i++) {
@ -1646,7 +1644,7 @@ static int dump_exit_status(int argc, char *argv[], void *userdata) {
TABLE_INT, status,
TABLE_STRING, exit_status_class(status) ?: "-");
if (r < 0)
return r;
return table_log_add_error(r);
}
(void) pager_open(arg_pager_flags);
@ -1853,33 +1851,23 @@ static int dump_timespan(int argc, char *argv[], void *userdata) {
if (r < 0)
return r;
r = table_add_cell(table, NULL, TABLE_STRING, "Original:");
r = table_add_many(table,
TABLE_STRING, "Original:",
TABLE_STRING, *input_timespan);
if (r < 0)
return r;
r = table_add_cell(table, NULL, TABLE_STRING, *input_timespan);
if (r < 0)
return r;
return table_log_add_error(r);
r = table_add_cell_stringf(table, NULL, "%ss:", special_glyph(SPECIAL_GLYPH_MU));
if (r < 0)
return r;
return table_log_add_error(r);
r = table_add_cell(table, NULL, TABLE_UINT64, &output_usecs);
r = table_add_many(table,
TABLE_UINT64, &output_usecs,
TABLE_STRING, "Human:",
TABLE_TIMESPAN, &output_usecs,
TABLE_SET_COLOR, ansi_highlight());
if (r < 0)
return r;
r = table_add_cell(table, NULL, TABLE_STRING, "Human:");
if (r < 0)
return r;
r = table_add_cell(table, &cell, TABLE_TIMESPAN, &output_usecs);
if (r < 0)
return r;
r = table_set_color(table, cell, ansi_highlight());
if (r < 0)
return r;
return table_log_add_error(r);
r = table_print(table, NULL);
if (r < 0)
@ -1925,57 +1913,42 @@ static int test_timestamp_one(const char *p) {
if (r < 0)
return r;
r = table_add_cell(table, NULL, TABLE_STRING, "Original form:");
r = table_add_many(table,
TABLE_STRING, "Original form:",
TABLE_STRING, p,
TABLE_STRING, "Normalized form:",
TABLE_TIMESTAMP, &usec,
TABLE_SET_COLOR, ansi_highlight_blue());
if (r < 0)
return r;
r = table_add_cell(table, NULL, TABLE_STRING, p);
if (r < 0)
return r;
r = table_add_cell(table, NULL, TABLE_STRING, "Normalized form:");
if (r < 0)
return r;
r = table_add_cell(table, &cell, TABLE_TIMESTAMP, &usec);
if (r < 0)
return r;
r = table_set_color(table, cell, ansi_highlight_blue());
if (r < 0)
return r;
return table_log_add_error(r);
if (!in_utc_timezone()) {
r = table_add_cell(table, NULL, TABLE_STRING, "(in UTC):");
r = table_add_many(table,
TABLE_STRING, "(in UTC):",
TABLE_TIMESTAMP_UTC, &usec);
if (r < 0)
return r;
r = table_add_cell(table, &cell, TABLE_TIMESTAMP_UTC, &usec);
if (r < 0)
return r;
return table_log_add_error(r);
}
r = table_add_cell(table, NULL, TABLE_STRING, "UNIX seconds:");
if (r < 0)
return r;
return table_log_add_error(r);
if (usec % USEC_PER_SEC == 0)
r = table_add_cell_stringf(table, &cell, "@%"PRI_USEC,
r = table_add_cell_stringf(table, NULL, "@%"PRI_USEC,
usec / USEC_PER_SEC);
else
r = table_add_cell_stringf(table, &cell, "@%"PRI_USEC".%06"PRI_USEC"",
r = table_add_cell_stringf(table, NULL, "@%"PRI_USEC".%06"PRI_USEC"",
usec / USEC_PER_SEC,
usec % USEC_PER_SEC);
if (r < 0)
return r;
r = table_add_cell(table, NULL, TABLE_STRING, "From now:");
r = table_add_many(table,
TABLE_STRING, "From now:",
TABLE_TIMESTAMP_RELATIVE, &usec);
if (r < 0)
return r;
r = table_add_cell(table, &cell, TABLE_TIMESTAMP_RELATIVE, &usec);
if (r < 0)
return r;
return table_log_add_error(r);
return table_print(table, NULL);
}
@ -2035,22 +2008,18 @@ static int test_calendar_one(usec_t n, const char *p) {
return r;
if (!streq(t, p)) {
r = table_add_cell(table, NULL, TABLE_STRING, "Original form:");
r = table_add_many(table,
TABLE_STRING, "Original form:",
TABLE_STRING, p);
if (r < 0)
return r;
r = table_add_cell(table, NULL, TABLE_STRING, p);
if (r < 0)
return r;
return table_log_add_error(r);
}
r = table_add_cell(table, NULL, TABLE_STRING, "Normalized form:");
r = table_add_many(table,
TABLE_STRING, "Normalized form:",
TABLE_STRING, t);
if (r < 0)
return r;
r = table_add_cell(table, NULL, TABLE_STRING, t);
if (r < 0)
return r;
return table_log_add_error(r);
for (unsigned i = 0; i < arg_iterations; i++) {
usec_t next;
@ -2058,17 +2027,12 @@ static int test_calendar_one(usec_t n, const char *p) {
r = calendar_spec_next_usec(spec, n, &next);
if (r == -ENOENT) {
if (i == 0) {
r = table_add_cell(table, NULL, TABLE_STRING, "Next elapse:");
r = table_add_many(table,
TABLE_STRING, "Next elapse:",
TABLE_STRING, "never",
TABLE_SET_COLOR, ansi_highlight_yellow());
if (r < 0)
return r;
r = table_add_cell(table, &cell, TABLE_STRING, "never");
if (r < 0)
return r;
r = table_set_color(table, cell, ansi_highlight_yellow());
if (r < 0)
return r;
return table_log_add_error(r);
}
break;
}
@ -2076,17 +2040,12 @@ static int test_calendar_one(usec_t n, const char *p) {
return log_error_errno(r, "Failed to determine next elapse for '%s': %m", p);
if (i == 0) {
r = table_add_cell(table, NULL, TABLE_STRING, "Next elapse:");
r = table_add_many(table,
TABLE_STRING, "Next elapse:",
TABLE_TIMESTAMP, &next,
TABLE_SET_COLOR, ansi_highlight_blue());
if (r < 0)
return r;
r = table_add_cell(table, &cell, TABLE_TIMESTAMP, &next);
if (r < 0)
return r;
r = table_set_color(table, cell, ansi_highlight_blue());
if (r < 0)
return r;
return table_log_add_error(r);
} else {
int k = DECIMAL_STR_WIDTH(i + 1);
@ -2097,34 +2056,28 @@ static int test_calendar_one(usec_t n, const char *p) {
r = table_add_cell_stringf(table, NULL, "Iter. #%u:", i+1);
if (r < 0)
return r;
return table_log_add_error(r);
r = table_add_cell(table, &cell, TABLE_TIMESTAMP, &next);
r = table_add_many(table,
TABLE_TIMESTAMP, &next,
TABLE_SET_COLOR, ansi_highlight_blue());
if (r < 0)
return r;
r = table_set_color(table, cell, ansi_highlight_blue());
if (r < 0)
return r;
return table_log_add_error(r);
}
if (!in_utc_timezone()) {
r = table_add_cell(table, NULL, TABLE_STRING, "(in UTC):");
r = table_add_many(table,
TABLE_STRING, "(in UTC):",
TABLE_TIMESTAMP_UTC, &next);
if (r < 0)
return r;
r = table_add_cell(table, NULL, TABLE_TIMESTAMP_UTC, &next);
if (r < 0)
return r;
return table_log_add_error(r);
}
r = table_add_cell(table, NULL, TABLE_STRING, "From now:");
r = table_add_many(table,
TABLE_STRING, "From now:",
TABLE_TIMESTAMP_RELATIVE, &next);
if (r < 0)
return r;
r = table_add_cell(table, NULL, TABLE_TIMESTAMP_RELATIVE, &next);
if (r < 0)
return r;
return table_log_add_error(r);
n = next;
}