systemctl: move compare_unit_info() to bus-unit-util.[ch]

It's an auxiliary function to the UnitInfo structures, and very generic.
Let's hence move it over to the other code operating with UnitInfo, even
if it's not used by code outside of systemctl (yet).
This commit is contained in:
Lennart Poettering 2020-10-07 21:56:41 +02:00
parent e2d839d316
commit 4dcc0653b5
3 changed files with 21 additions and 19 deletions

View File

@ -2407,3 +2407,20 @@ int unit_load_state(sd_bus *bus, const char *name, char **load_state) {
return 0;
}
int unit_info_compare(const UnitInfo *a, const UnitInfo *b) {
int r;
/* First, order by machine */
r = strcasecmp_ptr(a->machine, b->machine);
if (r != 0)
return r;
/* Second, order by unit type */
r = strcasecmp_ptr(strrchr(a->id, '.'), strrchr(b->id, '.'));
if (r != 0)
return r;
/* Third, order by name */
return strcasecmp(a->id, b->id);
}

View File

@ -28,3 +28,5 @@ int bus_append_unit_property_assignment_many(sd_bus_message *m, UnitType t, char
int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet, UnitFileChange **changes, size_t *n_changes);
int unit_load_state(sd_bus *bus, const char *name, char **load_state);
int unit_info_compare(const UnitInfo *a, const UnitInfo *b);

View File

@ -323,23 +323,6 @@ static bool install_client_side(void) {
return false;
}
static int compare_unit_info(const UnitInfo *a, const UnitInfo *b) {
int r;
/* First, order by machine */
r = strcasecmp_ptr(a->machine, b->machine);
if (r != 0)
return r;
/* Second, order by unit type */
r = strcasecmp_ptr(strrchr(a->id, '.'), strrchr(b->id, '.'));
if (r != 0)
return r;
/* Third, order by name */
return strcasecmp(a->id, b->id);
}
static const char* unit_type_suffix(const char *name) {
const char *dot;
@ -865,7 +848,7 @@ static int list_units(int argc, char *argv[], void *userdata) {
return r;
}
typesafe_qsort(unit_infos, r, compare_unit_info);
typesafe_qsort(unit_infos, r, unit_info_compare);
return output_units_list(unit_infos, r);
}
@ -5724,7 +5707,7 @@ static int show_all(
c = (unsigned) r;
typesafe_qsort(unit_infos, c, compare_unit_info);
typesafe_qsort(unit_infos, c, unit_info_compare);
for (u = unit_infos; u < unit_infos + c; u++) {
_cleanup_free_ char *p = NULL;