[settings] Add automagic "netX" settings block for last opened netdev
[people/mcb30/gpxe.git] / src / core / settings.c
index 7a02985..fe67d6b 100644 (file)
@@ -328,11 +328,20 @@ parse_settings_name ( const char *name,
 
        /* Parse each name component in turn */
        while ( remainder ) {
 
        /* Parse each name component in turn */
        while ( remainder ) {
+               struct net_device *netdev;
+
                subname = remainder;
                remainder = strchr ( subname, '.' );
                if ( remainder )
                        *(remainder++) = '\0';
                subname = remainder;
                remainder = strchr ( subname, '.' );
                if ( remainder )
                        *(remainder++) = '\0';
-               settings = get_child ( settings, subname );
+
+               /* Special case "netX" root settings block */
+               if ( ( subname == name_copy ) && ! strcmp ( subname, "netX" ) &&
+                    ( ( netdev = last_opened_netdev() ) != NULL ) )
+                       settings = get_child ( settings, netdev->name );
+               else
+                       settings = get_child ( settings, subname );
+
                if ( ! settings )
                        break;
        }
                if ( ! settings )
                        break;
        }
@@ -782,8 +791,12 @@ int setting_cmp ( struct setting *a, struct setting *b ) {
        if ( a->tag && ( a->tag == b->tag ) )
                return 0;
 
        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 );
 }
 
 /******************************************************************************
 }
 
 /******************************************************************************