aboutsummaryrefslogtreecommitdiffstats
path: root/src/cfg_utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cfg_utils.c')
-rw-r--r--src/cfg_utils.c48
1 files changed, 35 insertions, 13 deletions
diff --git a/src/cfg_utils.c b/src/cfg_utils.c
index 28430df14..c1b71e10a 100644
--- a/src/cfg_utils.c
+++ b/src/cfg_utils.c
@@ -449,23 +449,45 @@ cfg_parse_time (const gchar *t, enum time_type default_type)
gchar
parse_flag (const gchar *str)
{
- if (!str || !*str)
- return -1;
+ guint len;
+ gchar c;
- if ((*str == 'Y' || *str == 'y')) {
- return 1;
- }
-
- if ((*str == 'Y' || *str == 'y') && (*(str + 1) == 'E' || *(str + 1) == 'e') && (*(str + 2) == 'S' || *(str + 2) == 's')) {
- return 1;
+ if (!str || !*str) {
+ return -1;
}
- if ((*str == 'N' || *str == 'n')) {
- return 0;
- }
+ len = strlen (str);
- if ((*str == 'N' || *str == 'n') && (*(str + 1) == 'O' || *(str + 1) == 'o')) {
- return 0;
+ switch (len) {
+ case 1:
+ c = g_ascii_tolower (*str);
+ if (c == 'y' || c == '1') {
+ return 1;
+ }
+ else if (c == 'n' || c == '0') {
+ return 0;
+ }
+ break;
+ case 2:
+ if (g_ascii_strncasecmp (str, "no", len) == 0) {
+ return 0;
+ }
+ break;
+ case 3:
+ if (g_ascii_strncasecmp (str, "yes", len) == 0) {
+ return 1;
+ }
+ break;
+ case 4:
+ if (g_ascii_strncasecmp (str, "true", len) == 0) {
+ return 1;
+ }
+ break;
+ case 5:
+ if (g_ascii_strncasecmp (str, "false", len) == 0) {
+ return 0;
+ }
+ break;
}
return -1;