From c75090cdf28e126410f7260a60ee19e268925dbc Mon Sep 17 00:00:00 2001 From: Jan Vidar Krey Date: Thu, 29 Jul 2010 08:42:40 +0200 Subject: [PATCH] Added a generic string to boolean parser. --- src/util/misc.c | 35 +++++++++++++++++++++++++++++++++++ src/util/misc.h | 8 ++++++++ 2 files changed, 43 insertions(+) diff --git a/src/util/misc.c b/src/util/misc.c index c9ed932..c670638 100644 --- a/src/util/misc.c +++ b/src/util/misc.c @@ -448,3 +448,38 @@ void strip_off_ini_line_comments(char* line, int line_count) } *out = '\0'; } + +int string_to_boolean(const char* str, int* boolean) +{ + if (!str || !*str || !boolean) + return 0; + + switch (strlen(str)) + { + case 1: + if (str[0] == '1') { *boolean = 1; return 1; } + else if (str[0] == '0') { *boolean = 0; return 1; } + return 0; + + case 2: + if (!strcasecmp(str, "on")) { *boolean = 1; return 1; } + if (!strcasecmp(str, "no")) { *boolean = 0; return 1; } + return 0; + + case 3: + if (!strcasecmp(str, "yes")) { *boolean = 1; return 1; } + if (!strcasecmp(str, "off")) { *boolean = 0; return 1; } + return 0; + + case 4: + if (!strcasecmp(str, "true")) { *boolean = 1; return 1; } + return 0; + + case 5: + if (!strcasecmp(str, "false")) { *boolean = 0; return 1; } + return 0; + + default: + return 0; + } +} diff --git a/src/util/misc.h b/src/util/misc.h index 43f8d10..048ee56 100644 --- a/src/util/misc.h +++ b/src/util/misc.h @@ -37,6 +37,14 @@ extern void strip_off_ini_line_comments(char* line, int line_count); extern int file_read_lines(const char* file, void* data, file_line_handler_t handler); +/** + * Convert a string to a boolean (0 or 1). + * Example: + * "yes", "true", "1", "on" sets 1 in boolean, and returns 1. + * "no", "false", "0", "off" sets 0 in boolean, and returns 1. + * All other values return 0, and boolean is unchanged. + */ +extern int string_to_boolean(const char* str, int* boolean); extern const char* uhub_itoa(int val);