From 03398e33894536b69565c88797cf97a22f14fbc7 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 18 Mar 2008 04:13:11 +0000 Subject: [PATCH] [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". --- src/core/settings.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/core/settings.c b/src/core/settings.c index 11afd824..42de5c4e 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' :