mirror of
https://github.com/systemd/systemd.git
synced 2025-01-25 10:04:04 +03:00
analyze: split out "exit-status" verb
This commit is contained in:
parent
ab86ccbab0
commit
73cb64c44d
52
src/analyze/analyze-exit-status.c
Normal file
52
src/analyze/analyze-exit-status.c
Normal file
@ -0,0 +1,52 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
|
||||
#include "analyze.h"
|
||||
#include "analyze-exit-status.h"
|
||||
#include "exit-status.h"
|
||||
#include "format-table.h"
|
||||
|
||||
int dump_exit_status(int argc, char *argv[], void *userdata) {
|
||||
_cleanup_(table_unrefp) Table *table = NULL;
|
||||
int r;
|
||||
|
||||
table = table_new("name", "status", "class");
|
||||
if (!table)
|
||||
return log_oom();
|
||||
|
||||
r = table_set_align_percent(table, table_get_cell(table, 0, 1), 100);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to right-align status: %m");
|
||||
|
||||
if (strv_isempty(strv_skip(argv, 1)))
|
||||
for (size_t i = 0; i < ELEMENTSOF(exit_status_mappings); i++) {
|
||||
if (!exit_status_mappings[i].name)
|
||||
continue;
|
||||
|
||||
r = table_add_many(table,
|
||||
TABLE_STRING, exit_status_mappings[i].name,
|
||||
TABLE_INT, (int) i,
|
||||
TABLE_STRING, exit_status_class(i));
|
||||
if (r < 0)
|
||||
return table_log_add_error(r);
|
||||
}
|
||||
else
|
||||
for (int i = 1; i < argc; i++) {
|
||||
int status;
|
||||
|
||||
status = exit_status_from_string(argv[i]);
|
||||
if (status < 0)
|
||||
return log_error_errno(status, "Invalid exit status \"%s\".", argv[i]);
|
||||
|
||||
assert(status >= 0 && (size_t) status < ELEMENTSOF(exit_status_mappings));
|
||||
r = table_add_many(table,
|
||||
TABLE_STRING, exit_status_mappings[status].name ?: "-",
|
||||
TABLE_INT, status,
|
||||
TABLE_STRING, exit_status_class(status) ?: "-");
|
||||
if (r < 0)
|
||||
return table_log_add_error(r);
|
||||
}
|
||||
|
||||
pager_open(arg_pager_flags);
|
||||
|
||||
return table_print(table, NULL);
|
||||
}
|
4
src/analyze/analyze-exit-status.h
Normal file
4
src/analyze/analyze-exit-status.h
Normal file
@ -0,0 +1,4 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
#pragma once
|
||||
|
||||
int dump_exit_status(int argc, char *argv[], void *userdata);
|
@ -18,6 +18,7 @@
|
||||
#include "analyze-dot.h"
|
||||
#include "analyze-dump.h"
|
||||
#include "analyze-elf.h"
|
||||
#include "analyze-exit-status.h"
|
||||
#include "analyze-filesystems.h"
|
||||
#include "analyze-security.h"
|
||||
#include "analyze-service-watchdogs.h"
|
||||
@ -1311,52 +1312,6 @@ static int dump_unit_paths(int argc, char *argv[], void *userdata) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int dump_exit_status(int argc, char *argv[], void *userdata) {
|
||||
_cleanup_(table_unrefp) Table *table = NULL;
|
||||
int r;
|
||||
|
||||
table = table_new("name", "status", "class");
|
||||
if (!table)
|
||||
return log_oom();
|
||||
|
||||
r = table_set_align_percent(table, table_get_cell(table, 0, 1), 100);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to right-align status: %m");
|
||||
|
||||
if (strv_isempty(strv_skip(argv, 1)))
|
||||
for (size_t i = 0; i < ELEMENTSOF(exit_status_mappings); i++) {
|
||||
if (!exit_status_mappings[i].name)
|
||||
continue;
|
||||
|
||||
r = table_add_many(table,
|
||||
TABLE_STRING, exit_status_mappings[i].name,
|
||||
TABLE_INT, (int) i,
|
||||
TABLE_STRING, exit_status_class(i));
|
||||
if (r < 0)
|
||||
return table_log_add_error(r);
|
||||
}
|
||||
else
|
||||
for (int i = 1; i < argc; i++) {
|
||||
int status;
|
||||
|
||||
status = exit_status_from_string(argv[i]);
|
||||
if (status < 0)
|
||||
return log_error_errno(status, "Invalid exit status \"%s\".", argv[i]);
|
||||
|
||||
assert(status >= 0 && (size_t) status < ELEMENTSOF(exit_status_mappings));
|
||||
r = table_add_many(table,
|
||||
TABLE_STRING, exit_status_mappings[status].name ?: "-",
|
||||
TABLE_INT, status,
|
||||
TABLE_STRING, exit_status_class(status) ?: "-");
|
||||
if (r < 0)
|
||||
return table_log_add_error(r);
|
||||
}
|
||||
|
||||
pager_open(arg_pager_flags);
|
||||
|
||||
return table_print(table, NULL);
|
||||
}
|
||||
|
||||
static int dump_capabilities(int argc, char *argv[], void *userdata) {
|
||||
_cleanup_(table_unrefp) Table *table = NULL;
|
||||
unsigned last_cap;
|
||||
|
@ -11,6 +11,8 @@ systemd_analyze_sources = files('''
|
||||
analyze-dump.h
|
||||
analyze-elf.c
|
||||
analyze-elf.h
|
||||
analyze-exit-status.c
|
||||
analyze-exit-status.h
|
||||
analyze-filesystems.c
|
||||
analyze-filesystems.h
|
||||
analyze-security.c
|
||||
|
Loading…
x
Reference in New Issue
Block a user