From: Michael Brown Date: Tue, 18 Mar 2008 04:13:11 +0000 (+0000) Subject: [Settings] Allow encapsulated options to be specified as named settings X-Git-Tag: v0.9.4~220 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=03398e33894536b69565c88797cf97a22f14fbc7;p=thirdparty%2Fipxe.git [Settings] Allow encapsulated options to be specified as named settings Allow encapsulated options to be specified as e.g. "175.3". As a side-effect, change the separator character for the type field from "." to ":"; for example, the IP address pseudo-option is now "175.3:ipv4". --- diff --git a/src/core/settings.c b/src/core/settings.c index 11afd8245..42de5c4e1 100644 --- a/src/core/settings.c +++ b/src/core/settings.c @@ -91,7 +91,7 @@ static struct config_setting * find_config_setting ( const char *name ) { * @ret setting Configuration setting, or NULL * * Find setting if it exists. If it doesn't exist, but the name is of - * the form "." (e.g. "12.string"), then construct a + * the form ":" (e.g. "12:string"), then construct a * setting for that tag and data type, and return it. The constructed * setting will be placed in the temporary buffer. */ @@ -106,13 +106,19 @@ find_or_build_config_setting ( const char *name, if ( setting ) return setting; - /* If name is of the form ".", try to construct a setting */ + /* If name is of the form ":", try to construct a setting */ setting = tmp_setting; memset ( setting, 0, sizeof ( *setting ) ); setting->name = name; - setting->tag = strtoul ( name, &separator, 10 ); + for ( separator = ( char * ) name ; 1 ; separator++ ) { + setting->tag = ( ( setting->tag << 8 ) | + strtoul ( separator, &separator, 0 ) ); + if ( *separator != '.' ) + break; + } + switch ( *separator ) { - case '.' : + case ':' : setting->type = find_config_setting_type ( separator + 1 ); break; case '\0' :