]> xenbits.xensource.com Git - libvirt.git/commitdiff
commandhelper: Simplify envsort
authorTim Wiederhake <twiederh@redhat.com>
Mon, 1 Feb 2021 11:27:47 +0000 (12:27 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 2 Feb 2021 14:00:53 +0000 (15:00 +0100)
This saves two invocations of each `strndup` and `free`.

Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
tests/commandhelper.c

index 2b937979c0e9f0d25ba018aca92f7846dccbe8d0..22835302b8acc85667cfd15ba9736781263adb7b 100644 (file)
@@ -37,24 +37,19 @@ extern char **environ;
 
 static int envsort(const void *a, const void *b)
 {
-    const char *const*astrptr = a;
-    const char *const*bstrptr = b;
-    const char *astr = *astrptr;
-    const char *bstr = *bstrptr;
-    char *aeq = strchr(astr, '=');
-    char *beq = strchr(bstr, '=');
-    char *akey;
-    char *bkey;
-    int ret;
-
-    if (!(akey = strndup(astr, aeq - astr)))
-        abort();
-    if (!(bkey = strndup(bstr, beq - bstr)))
-        abort();
-    ret = strcmp(akey, bkey);
-    free(akey);
-    free(bkey);
-    return ret;
+    const char *astr = *(const char**)a;
+    const char *bstr = *(const char**)b;
+
+    while (true) {
+        char achar = (*astr == '=') ? '\0' : *astr;
+        char bchar = (*bstr == '=') ? '\0' : *bstr;
+
+        if ((achar == '\0') || (achar != bchar))
+            return achar - bchar;
+
+        astr++;
+        bstr++;
+    }
 }
 
 int main(int argc, char **argv) {