mirror of
https://github.com/systemd/systemd.git
synced 2024-10-28 03:25:31 +03:00
systemctl: split job list writing to a seperate function
This commit is contained in:
parent
ef639c5f9e
commit
eb68c413aa
155
src/systemctl.c
155
src/systemctl.c
@ -251,12 +251,88 @@ static int compare_unit_info(const void *a, const void *b) {
|
||||
return strcasecmp(u->id, v->id);
|
||||
}
|
||||
|
||||
static void output_units_list(const struct unit_info *unit_infos, unsigned c) {
|
||||
if (on_tty()) {
|
||||
if (columns() >= 80+12 || arg_full)
|
||||
printf("%-25s %-6s %-12s %-18s %-15s %s\n", "UNIT", "LOAD", "ACTIVE", "SUB", "JOB", "DESCRIPTION");
|
||||
else
|
||||
printf("%-25s %-6s %-12s %-18s %-15s\n", "UNIT", "LOAD", "ACTIVE", "SUB", "JOB");
|
||||
}
|
||||
|
||||
for (const struct unit_info *u = unit_infos; u < unit_infos + c; u++) {
|
||||
const char *dot;
|
||||
|
||||
if ((!arg_type || ((dot = strrchr(u->id, '.')) &&
|
||||
streq(dot+1, arg_type))) &&
|
||||
(arg_all || !(streq(u->active_state, "inactive") || u->following[0]) || u->job_id > 0)) {
|
||||
char *e;
|
||||
int a = 0, b = 0;
|
||||
const char *on_loaded, *off_loaded;
|
||||
const char *on_active, *off_active;
|
||||
|
||||
if (!streq(u->load_state, "loaded")) {
|
||||
on_loaded = ansi_highlight(true);
|
||||
off_loaded = ansi_highlight(false);
|
||||
} else
|
||||
on_loaded = off_loaded = "";
|
||||
|
||||
if (streq(u->active_state, "failed")) {
|
||||
on_active = ansi_highlight(true);
|
||||
off_active = ansi_highlight(false);
|
||||
} else
|
||||
on_active = off_active = "";
|
||||
|
||||
e = arg_full ? NULL : ellipsize(u->id, 25, 33);
|
||||
|
||||
printf("%-25s %s%-6s%s %s%-12s %-18s%s%n",
|
||||
e ? e : u->id,
|
||||
on_loaded, u->load_state, off_loaded,
|
||||
on_active, u->active_state, u->sub_state, off_active,
|
||||
&a);
|
||||
|
||||
free(e);
|
||||
|
||||
a -= strlen(on_loaded) + strlen(off_loaded);
|
||||
a -= strlen(on_active) + strlen(off_active);
|
||||
|
||||
if (u->job_id != 0)
|
||||
printf(" %-15s%n", u->job_type, &b);
|
||||
else
|
||||
b = 1 + 15;
|
||||
|
||||
if (a + b + 1 < columns()) {
|
||||
if (u->job_id == 0)
|
||||
printf(" ");
|
||||
|
||||
if (arg_full)
|
||||
printf(" %s", u->description);
|
||||
else
|
||||
printf(" %.*s", columns() - a - b - 1, u->description);
|
||||
}
|
||||
|
||||
fputs("\n", stdout);
|
||||
}
|
||||
}
|
||||
|
||||
if (!on_tty()) {
|
||||
printf("\nLOAD = Reflects whether the unit definition was properly loaded.\n"
|
||||
"ACTIVE = The high-level unit activation state, i.e. generalization of SUB.\n"
|
||||
"SUB = The low-level unit activation state, values depend on unit type.\n"
|
||||
"JOB = Pending job for the unit.\n");
|
||||
|
||||
if (arg_all)
|
||||
printf("\n%u units listed.\n", c);
|
||||
else
|
||||
printf("\n%u units listed. Pass --all to see inactive units, too.\n", c);
|
||||
}
|
||||
}
|
||||
|
||||
static int list_units(DBusConnection *bus, char **args, unsigned n) {
|
||||
DBusMessage *m = NULL, *reply = NULL;
|
||||
DBusError error;
|
||||
int r;
|
||||
DBusMessageIter iter, sub, sub2;
|
||||
unsigned c = 0, k, n_units = 0;
|
||||
unsigned c = 0, n_units = 0;
|
||||
struct unit_info *unit_infos = NULL;
|
||||
|
||||
dbus_error_init(&error);
|
||||
@ -336,82 +412,7 @@ static int list_units(DBusConnection *bus, char **args, unsigned n) {
|
||||
}
|
||||
|
||||
qsort(unit_infos, c, sizeof(struct unit_info), compare_unit_info);
|
||||
|
||||
if (on_tty()) {
|
||||
if (columns() >= 80+12 || arg_full)
|
||||
printf("%-25s %-6s %-12s %-18s %-15s %s\n", "UNIT", "LOAD", "ACTIVE", "SUB", "JOB", "DESCRIPTION");
|
||||
else
|
||||
printf("%-25s %-6s %-12s %-18s %-15s\n", "UNIT", "LOAD", "ACTIVE", "SUB", "JOB");
|
||||
}
|
||||
|
||||
for (k = 0; k < c; k++) {
|
||||
const char *dot;
|
||||
struct unit_info *u = unit_infos+k;
|
||||
|
||||
if ((!arg_type || ((dot = strrchr(u->id, '.')) &&
|
||||
streq(dot+1, arg_type))) &&
|
||||
(arg_all || !(streq(u->active_state, "inactive") || u->following[0]) || u->job_id > 0)) {
|
||||
char *e;
|
||||
int a = 0, b = 0;
|
||||
const char *on_loaded, *off_loaded;
|
||||
const char *on_active, *off_active;
|
||||
|
||||
if (!streq(u->load_state, "loaded")) {
|
||||
on_loaded = ansi_highlight(true);
|
||||
off_loaded = ansi_highlight(false);
|
||||
} else
|
||||
on_loaded = off_loaded = "";
|
||||
|
||||
if (streq(u->active_state, "failed")) {
|
||||
on_active = ansi_highlight(true);
|
||||
off_active = ansi_highlight(false);
|
||||
} else
|
||||
on_active = off_active = "";
|
||||
|
||||
e = arg_full ? NULL : ellipsize(u->id, 25, 33);
|
||||
|
||||
printf("%-25s %s%-6s%s %s%-12s %-18s%s%n",
|
||||
e ? e : u->id,
|
||||
on_loaded, u->load_state, off_loaded,
|
||||
on_active, u->active_state, u->sub_state, off_active,
|
||||
&a);
|
||||
|
||||
free(e);
|
||||
|
||||
a -= strlen(on_loaded) + strlen(off_loaded);
|
||||
a -= strlen(on_active) + strlen(off_active);
|
||||
|
||||
if (u->job_id != 0)
|
||||
printf(" %-15s%n", u->job_type, &b);
|
||||
else
|
||||
b = 1 + 15;
|
||||
|
||||
if (a + b + 1 < columns()) {
|
||||
if (u->job_id == 0)
|
||||
printf(" ");
|
||||
|
||||
if (arg_full)
|
||||
printf(" %s", u->description);
|
||||
else
|
||||
printf(" %.*s", columns() - a - b - 1, u->description);
|
||||
}
|
||||
|
||||
fputs("\n", stdout);
|
||||
}
|
||||
}
|
||||
|
||||
if (on_tty()) {
|
||||
|
||||
printf("\nLOAD = Reflects whether the unit definition was properly loaded.\n"
|
||||
"ACTIVE = The high-level unit activation state, i.e. generalization of SUB.\n"
|
||||
"SUB = The low-level unit activation state, values depend on unit type.\n"
|
||||
"JOB = Pending job for the unit.\n");
|
||||
|
||||
if (arg_all)
|
||||
printf("\n%u units listed.\n", c);
|
||||
else
|
||||
printf("\n%u units listed. Pass --all to see inactive units, too.\n", c);
|
||||
}
|
||||
output_units_list(unit_infos, c);
|
||||
|
||||
r = 0;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user