chiark / gitweb /
set: introduce strv_sort()
authorLennart Poettering <lennart@poettering.net>
Fri, 19 Oct 2012 02:52:25 +0000 (04:52 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 19 Oct 2012 02:53:45 +0000 (04:53 +0200)
src/shared/strv.c
src/shared/strv.h
src/timedate/timedatectl.c

index 822b2dc888e3865bd80341bbb6dc96d6c3874920..1b8e27bc1b963aa6ccbe2a34d437880110bb6250 100644 (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;
+}
index 81e33356f91f367432cb91957abf3252100a8d23..45558d8960e703f60afa50dcb1df34f16ab5d9c9 100644 (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);
index 2b006ce924a552cf1577d265cce4c4a2d648ffa2..469a65e6359958cac7ee6612ea88d73ba87579de 100644 (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);