# HG changeset patch # User David Demelier # Date 1321732278 -3600 # Node ID 8cea08140a71c675f70892ccb72be5aeb5724ece # Parent 89e4d8d63bfaa0800910eacdda4120116be1070b Fix comment issue and switch ini_value_dispatch to allow NULL values diff -r 89e4d8d63bfa -r 8cea08140a71 ini.c --- a/ini.c Sat Nov 19 18:49:19 2011 +0100 +++ b/ini.c Sat Nov 19 20:51:18 2011 +0100 @@ -83,9 +83,9 @@ if (I_VERBOSE((file))) \ fprintf(stderr, fmt, __VA_ARGS__) -/* -------------------------------------------------------- */ -/* public functions */ -/* -------------------------------------------------------- */ +/* -------------------------------------------------------- + * public functions + * -------------------------------------------------------- */ struct ini_config * ini_load(const char *path, int flags) @@ -302,8 +302,8 @@ if (section == NULL) continue; - if ((value = ini_get_option(section, hdrs[i].option)) != NULL) - hdrs[i].handler(hdrs[i].dst, value, hdrs[i].userdata); + value = ini_get_option(section, hdrs[i].option); + hdrs[i].handler(hdrs[i].dst, value, hdrs[i].userdata); } } @@ -312,6 +312,9 @@ { char *p = dst; + if (value == NULL) + return ; + if (strcmp(value, "yes") == 0 || strcmp(value, "true") == 0 || strcmp(value, "1") == 0) @@ -327,6 +330,9 @@ { int *p = dst; + if (value == NULL) + return ; + *p = (int) strtol(value, NULL, 10); (void)dummy; } @@ -336,6 +342,9 @@ { short *p = dst; + if (value == NULL) + return ; + *p = (short) strtol(value, NULL, 10); (void)dummy; } @@ -345,7 +354,11 @@ { char **p = dst; - *p = strdup(value); + if (value == NULL) + *p = NULL; + else + *p = strdup(value); + (void)dummy; } @@ -602,7 +615,8 @@ /* Find end of option value */ token = *endValue; if (token == '\'' || token == '"') { - for (*lp = ++endValue; *endValue != token && *endValue != '\0'; ++endValue) + for (*lp = ++endValue; *endValue != token && + *endValue != '\0'; ++endValue) continue; length = endValue - *lp; @@ -613,7 +627,8 @@ else WARN(conf, "line %d: missing '%c'\n", conf->lineno, token); } else { - for (*lp = endValue; !isspace(*endValue) && *endValue != '\0'; ++endValue) + for (*lp = endValue; !isspace(*endValue) && *endValue != '\0' && + *endValue != '#' && *endValue != ';'; ++endValue) continue; length = endValue - *lp;