[libvirt PATCH 03/19] commandhelper: Simplify envsort

Tim Wiederhake posted 19 patches 5 years ago
There is a newer version of this series
[libvirt PATCH 03/19] commandhelper: Simplify envsort
Posted by Tim Wiederhake 5 years ago
Comparing only the keys produces the same result as comparing keys and
value. The latter saves two invocations of each `strndup` and `free`.

Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
---
 tests/commandhelper.c | 17 +----------------
 1 file changed, 1 insertion(+), 16 deletions(-)

diff --git a/tests/commandhelper.c b/tests/commandhelper.c
index 2b937979c0..05e3879688 100644
--- a/tests/commandhelper.c
+++ b/tests/commandhelper.c
@@ -39,22 +39,7 @@ 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;
+    return strcmp(*astrptr, *bstrptr);
 }
 
 int main(int argc, char **argv) {
-- 
2.26.2

Re: [libvirt PATCH 03/19] commandhelper: Simplify envsort
Posted by Peter Krempa 5 years ago
On Fri, Jan 29, 2021 at 17:16:13 +0100, Tim Wiederhake wrote:
> Comparing only the keys produces the same result as comparing keys and
> value. The latter saves two invocations of each `strndup` and `free`.

env variable names allow also ascii chars with lower index than '=' such
as numbers:

$ TEST=asdf TEST1=asdf env | grep TEST | LANG=C sort
TEST1=asdf
TEST=asdf
$ TEST=asdf TEST1=asdf env | grep TEST | cut -d "=" -f 1 | LANG=C sort
TEST
TEST1