diff options
Diffstat (limited to 'src/libstrongswan/settings.c')
-rw-r--r-- | src/libstrongswan/settings.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/libstrongswan/settings.c b/src/libstrongswan/settings.c index 8a2248b46..395ae65e3 100644 --- a/src/libstrongswan/settings.c +++ b/src/libstrongswan/settings.c @@ -444,6 +444,25 @@ METHOD(settings_t, get_str, char*, return def; } +METHOD(settings_t, alloc_str, char*, + private_settings_t *this, char *key, char *def, ...) +{ + char *value; + va_list args; + + va_start(args, def); + /* additional lock to savely strdup */ + this->lock->read_lock(this->lock); + value = strdupnull(find_value(this, this->top, key, args)); + this->lock->unlock(this->lock); + va_end(args); + if (value) + { + return value; + } + return def; +} + /** * Described in header */ @@ -1192,6 +1211,7 @@ settings_t *settings_create(char *file) INIT(this, .public = { .get_str = _get_str, + .alloc_str = _alloc_str, .get_int = _get_int, .get_double = _get_double, .get_time = _get_time, |