From 1d3fe5efee821b312ffc7043734d396edd728af0 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Sun, 13 Jun 2010 15:25:31 +0200 Subject: [PATCH] src/configfile.[ch]: Implement "cf_util_get_flag". --- src/configfile.c | 30 ++++++++++++++++++++++++++++-- src/configfile.h | 7 ++++++- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/configfile.c b/src/configfile.c index afc3e479..46624dc9 100644 --- a/src/configfile.c +++ b/src/configfile.c @@ -1,6 +1,6 @@ /** * collectd - src/configfile.c - * Copyright (C) 2005-2009 Florian octo Forster + * Copyright (C) 2005-2010 Florian octo Forster * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -1009,11 +1009,37 @@ int cf_util_get_boolean (const oconfig_item_t *ci, _Bool *ret_bool) /* {{{ */ return (-1); } - *ret_bool = ci->values[0].value.boolean ? true : false; + *ret_bool = ci->values[0].value.boolean ? 1 : 0; return (0); } /* }}} int cf_util_get_boolean */ +int cf_util_get_flag (const oconfig_item_t *ci, /* {{{ */ + unsigned int *ret_value, unsigned int flag) +{ + int status; + _Bool b; + + if (ret_value == NULL) + return (EINVAL); + + b = 0; + status = cf_util_get_boolean (ci, &b); + if (status != 0) + return (status); + + if (b) + { + *ret_value |= flag; + } + else + { + *ret_value &= ~flag; + } + + return (0); +} /* }}} int cf_util_get_flag */ + /* Assures that the config option is a string. The string is then converted to * a port number using `service_name_to_port_number' and returned. Returns the * port number in the range [1-65535] or less than zero upon failure. */ diff --git a/src/configfile.h b/src/configfile.h index 432e09f5..519a6ff8 100644 --- a/src/configfile.h +++ b/src/configfile.h @@ -2,7 +2,7 @@ #define CONFIGFILE_H /** * collectd - src/configfile.h - * Copyright (C) 2005,2006 Florian octo Forster + * Copyright (C) 2005-2010 Florian octo Forster * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -103,6 +103,11 @@ int cf_util_get_int (const oconfig_item_t *ci, int *ret_value); * Otherwise, `ret_bool' is not changed and non-zero is returned. */ int cf_util_get_boolean (const oconfig_item_t *ci, _Bool *ret_bool); +/* Assures the config option is a boolean and set or unset the given flag in + * `ret_value' as appropriate. Returns non-zero on error. */ +int cf_util_get_flag (const oconfig_item_t *ci, + unsigned int *ret_value, unsigned int flag); + /* Assures that the config option is a string. The string is then converted to * a port number using `service_name_to_port_number' and returned. Returns the * port number in the range [1-65535] or less than zero upon failure. */ -- 2.30.2