From: Tobias Brunner Date: Mon, 15 Nov 2010 12:07:10 +0000 (+0100) Subject: Helper functions added to easily convert enumerated values. X-Git-Tag: 4.5.1~450 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d657edf576faf6bb4da1d0d301ae269bddecdc06;p=thirdparty%2Fstrongswan.git Helper functions added to easily convert enumerated values. --- diff --git a/src/libstrongswan/settings.c b/src/libstrongswan/settings.c index cc24312a7b..a7766643e1 100644 --- a/src/libstrongswan/settings.c +++ b/src/libstrongswan/settings.c @@ -352,15 +352,11 @@ METHOD(settings_t, get_str, char*, return def; } -METHOD(settings_t, get_bool, bool, - private_settings_t *this, char *key, bool def, ...) +/** + * Described in header + */ +inline bool settings_value_as_bool(char *value, bool def) { - char *value; - va_list args; - - va_start(args, def); - value = find_value(this, this->top, key, args); - va_end(args); if (value) { if (strcaseeq(value, "true") || @@ -381,16 +377,24 @@ METHOD(settings_t, get_bool, bool, return def; } -METHOD(settings_t, get_int, int, - private_settings_t *this, char *key, int def, ...) +METHOD(settings_t, get_bool, bool, + private_settings_t *this, char *key, bool def, ...) { char *value; - int intval; va_list args; va_start(args, def); value = find_value(this, this->top, key, args); va_end(args); + return settings_value_as_bool(value, def); +} + +/** + * Described in header + */ +inline int settings_value_as_int(char *value, int def) +{ + int intval; if (value) { errno = 0; @@ -403,16 +407,24 @@ METHOD(settings_t, get_int, int, return def; } -METHOD(settings_t, get_double, double, - private_settings_t *this, char *key, double def, ...) +METHOD(settings_t, get_int, int, + private_settings_t *this, char *key, int def, ...) { char *value; - double dval; va_list args; va_start(args, def); value = find_value(this, this->top, key, args); va_end(args); + return settings_value_as_int(value, def); +} + +/** + * Described in header + */ +inline double settings_value_as_double(char *value, double def) +{ + double dval; if (value) { errno = 0; @@ -425,16 +437,25 @@ METHOD(settings_t, get_double, double, return def; } -METHOD(settings_t, get_time, u_int32_t, - private_settings_t *this, char *key, u_int32_t def, ...) +METHOD(settings_t, get_double, double, + private_settings_t *this, char *key, double def, ...) { - char *value, *endptr; - u_int32_t timeval; + char *value; va_list args; va_start(args, def); value = find_value(this, this->top, key, args); va_end(args); + return settings_value_as_double(value, def); +} + +/** + * Described in header + */ +inline u_int32_t settings_value_as_time(char *value, u_int32_t def) +{ + char *endptr; + u_int32_t timeval; if (value) { errno = 0; @@ -462,6 +483,18 @@ METHOD(settings_t, get_time, u_int32_t, return def; } +METHOD(settings_t, get_time, u_int32_t, + private_settings_t *this, char *key, u_int32_t def, ...) +{ + char *value; + va_list args; + + va_start(args, def); + value = find_value(this, this->top, key, args); + va_end(args); + return settings_value_as_time(value, def); +} + /** * Enumerate section names, not sections */ diff --git a/src/libstrongswan/settings.h b/src/libstrongswan/settings.h index 70aa96fb5b..ad66fed58d 100644 --- a/src/libstrongswan/settings.h +++ b/src/libstrongswan/settings.h @@ -27,6 +27,46 @@ typedef struct settings_t settings_t; #include "utils.h" #include "utils/enumerator.h" +/** + * Convert a string value returned by a key/value enumerator to a boolean. + * + * @see settings_t.create_key_value_enumerator() + * @see settings_t.get_bool() + * @param value the string value + * @param def the default value, if value is NULL or invalid + */ +bool settings_value_as_bool(char *value, bool def); + +/** + * Convert a string value returned by a key/value enumerator to an integer. + * + * @see settings_t.create_key_value_enumerator() + * @see settings_t.get_int() + * @param value the string value + * @param def the default value, if value is NULL or invalid + */ +int settings_value_as_int(char *value, int def); + +/** + * Convert a string value returned by a key/value enumerator to a double. + * + * @see settings_t.create_key_value_enumerator() + * @see settings_t.get_double() + * @param value the string value + * @param def the default value, if value is NULL or invalid + */ +double settings_value_as_double(char *value, double def); + +/** + * Convert a string value returned by a key/value enumerator to a time value. + * + * @see settings_t.create_key_value_enumerator() + * @see settings_t.get_time() + * @param value the string value + * @param def the default value, if value is NULL or invalid + */ +u_int32_t settings_value_as_time(char *value, u_int32_t def); + /** * Generic configuration options read from a config file. * @@ -167,7 +207,7 @@ struct settings_t { * Create an enumerator over key/value pairs in a section. * * @param section section name to list key/value pairs of, printf style - * @param ... argmuent list for section + * @param ... argument list for section * @return enumerator over (char *key, char *value) */ enumerator_t* (*create_key_value_enumerator)(settings_t *this,