<div dir="ltr"><div dir="ltr"><br></div><div>FIX:There is an bug in xf86nameCompare, if you compare</div><div>a zero string with a non-zero string the result is inverted.<br></div><div>s1=zero string, s2 = non-zero string</div><div>this should return a value less than zero but the code returns 1.</div><div>  <br></div><div dir="ltr">-    if (!s1 || *s1 == 0) {                     <br>-        if (!s2 || *s2 == 0)<br>-            return 0;<br>-        else<br>-            return 1;               // s1 == ZERO, s2 == NOT ZERO<br>-    } else if (!s2 || *s2 == 0) {<br>-        return -1;<br></div><div dir="ltr"><br></div><div>The patch also rewrites and shrinkes the code to improve readability.<br></div><div>Signed-off-by: Jens Harms <<a href="mailto:au1064@gmail.com">au1064@gmail.com</a>><br></div><div dir="ltr"><br></div><div dir="ltr"><br>---<br> hw/xfree86/parser/scan.c | 56 ++++++++++++++++++----------------------<br> 1 file changed, 25 insertions(+), 31 deletions(-)<br><br>diff --git a/hw/xfree86/parser/scan.c b/hw/xfree86/parser/scan.c<br>index 1eb35ed73..7d63f0983 100644<br>--- a/hw/xfree86/parser/scan.c<br>+++ b/hw/xfree86/parser/scan.c<br>@@ -1006,45 +1006,39 @@ xf86getStringToken(const xf86ConfigSymTabRec * tab)<br>     return StringToToken(xf86_lex_val.str, tab);<br> }<br> <br>+<br>+/* skips space, underscore and tab, increments pointer.<br>+   returns: lowercase character code<br>+*/ <br>+inline static char skipws(const char **s)<br>+{<br>+    if( *s == NULL ) return 0;<br>+    while (**s == '_' || **s == ' ' || **s == '\t')<br>+        (*s)++;<br>+    char ch = tolower(**s) ; <br>+    (*s)++;<br>+    return ch;<br>+}<br>+<br> /*<br>- * Compare two names.  The characters '_', ' ', and '\t' are ignored<br>+ * Compare two names.  The characters '_', ' ', '\t', <br>+ * and upper/lower case are ignored<br>  * in the comparison.<br>  */<br> int<br> xf86nameCompare(const char *s1, const char *s2)<br> {<br>-    char c1, c2;<br>-<br>-    if (!s1 || *s1 == 0) {<br>-        if (!s2 || *s2 == 0)<br>-            return 0;<br>-        else<br>-            return 1;<br>-    } else if (!s2 || *s2 == 0) {<br>-        return -1;<br>-    }<br>-<br>-    while (*s1 == '_' || *s1 == ' ' || *s1 == '\t')<br>-        s1++;<br>-    while (*s2 == '_' || *s2 == ' ' || *s2 == '\t')<br>-        s2++;<br>-    c1 = (isupper(*s1) ? tolower(*s1) : *s1);<br>-    c2 = (isupper(*s2) ? tolower(*s2) : *s2);<br>-    while (c1 == c2) {<br>-        if (c1 == '\0')<br>-            return 0;<br>-        s1++;<br>-        s2++;<br>-        while (*s1 == '_' || *s1 == ' ' || *s1 == '\t')<br>-            s1++;<br>-        while (*s2 == '_' || *s2 == ' ' || *s2 == '\t')<br>-            s2++;<br>-        c1 = (isupper(*s1) ? tolower(*s1) : *s1);<br>-        c2 = (isupper(*s2) ? tolower(*s2) : *s2);<br>-    }<br>-    return c1 - c2;<br>+    register char c1, c2, ret;<br>+    <br>+    do {<br>+        c1 = skipws(&s1);<br>+        c2 = skipws(&s2);<br>+        ret = c1 - c2;<br>+    } while( !ret && c1 );       <br>+    return ret;<br> }<br> <br>+<br> char *<br> xf86addComment(char *cur, const char *add)<br> {<br>-- <br>2.17.1</div><div dir="ltr"><br></div><div dir="ltr"><br></div><div dir="ltr"><br></div></div>