set: introduce strv_sort()

This commit is contained in:
Lennart Poettering 2012-10-19 04:52:25 +02:00
parent 9590dfe771
commit 857a493d55
3 changed files with 19 additions and 9 deletions

View File

@ -735,3 +735,18 @@ bool strv_overlap(char **a, char **b) {
return false;
}
static int str_compare(const void *_a, const void *_b) {
const char **a = (const char**) _a, **b = (const char**) _b;
return strcmp(*a, *b);
}
char **strv_sort(char **l) {
if (strv_isempty(l))
return l;
qsort(l, strv_length(l), sizeof(char*), str_compare);
return l;
}

View File

@ -80,3 +80,5 @@ bool strv_overlap(char **a, char **b);
#define STRV_FOREACH_BACKWARDS(s, l) \
for (; (l) && ((s) >= (l)); (s)--)
char **strv_sort(char **l);

View File

@ -349,12 +349,6 @@ static int set_ntp(DBusConnection *bus, char **args, unsigned n) {
DBUS_TYPE_INVALID);
}
static int zone_compare(const void *_a, const void *_b) {
const char **a = (const char**) _a, **b = (const char**) _b;
return strcmp(*a, *b);
}
static int list_timezones(DBusConnection *bus, char **args, unsigned n) {
_cleanup_fclose_ FILE *f = NULL;
_cleanup_strv_free_ char **zones = NULL;
@ -416,12 +410,11 @@ static int list_timezones(DBusConnection *bus, char **args, unsigned n) {
}
if (zones)
zones[n_zones] = 0;
qsort(zones, n_zones, sizeof(char*), zone_compare);
zones[n_zones] = NULL;
pager_open_if_enabled();
strv_sort(zones);
STRV_FOREACH(i, zones)
puts(*i);