<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>