[settings] Fix setting_cmp() to handle nameless settings
authorShao Miller <shao.miller@yrdsb.edu.on.ca>
Thu, 11 Jun 2009 19:12:27 +0000 (15:12 -0400)
committerMichael Brown <mcb30@etherboot.org>
Sat, 13 Jun 2009 11:04:08 +0000 (12:04 +0100)
setting_cmp() compares by option tag and then by name.  Empty names
will always match, which gives us a false positive.

Fix by explicitly checking for empty names.

Modified-by: Michael Brown <mcb30@etherboot.org>
Signed-off-by: Michael Brown <mcb30@etherboot.org>
src/core/settings.c

index 7a02985..87d84a0 100644 (file)
@@ -782,8 +782,12 @@ int setting_cmp ( struct setting *a, struct setting *b ) {
        if ( a->tag && ( a->tag == b->tag ) )
                return 0;
 
-       /* Otherwise, compare the names */
-       return strcmp ( a->name, b->name );
+       /* Otherwise, if the settings have names, compare them */
+       if ( a->name && b->name && a->name[0] )
+               return strcmp ( a->name, b->name );
+
+       /* Otherwise, return a non-match */
+       return ( ! 0 );
 }
 
 /******************************************************************************