Module: sip-router Branch: master Commit: eedafa45ff4040d0a0f362b8fac6604be63ed7d7 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=eedafa45...
Author: Miklos Tirpak miklos@iptel.org Committer: Miklos Tirpak miklos@iptel.org Date: Thu Feb 10 14:50:33 2011 +0100
cfg framework: accept 0 int value within a group instance
- The parameter verification of new_add_var() was wrong, it did not accept NULL values which can be the case with integer 0.
- char* NULL and str {NULL, 0} are also valid values
---
cfg/cfg_struct.c | 36 ++++++++++++++++++++++-------------- 1 files changed, 22 insertions(+), 14 deletions(-)
diff --git a/cfg/cfg_struct.c b/cfg/cfg_struct.c index 6e93379..4e247cd 100644 --- a/cfg/cfg_struct.c +++ b/cfg/cfg_struct.c @@ -876,8 +876,8 @@ int new_add_var(str *group_name, unsigned int group_id, str *var_name, cfg_add_var_t *add_var = NULL, **add_var_p; int len;
- if (type && (!var_name || !val)) { - LOG(L_ERR, "ERROR: new_add_var(): Missing variable/value specification\n"); + if (type && !var_name) { + LOG(L_ERR, "ERROR: new_add_var(): Missing variable specification\n"); goto error; } if (type) @@ -929,24 +929,32 @@ int new_add_var(str *group_name, unsigned int group_id, str *var_name,
case CFG_VAR_STR: len = ((str *)val)->len; - add_var->val.s.s = (char *)pkg_malloc(sizeof(char) * len); - if (!add_var->val.s.s) { - LOG(L_ERR, "ERROR: new_add_var(): Not enough memory\n"); - goto error; + if (len) { + add_var->val.s.s = (char *)pkg_malloc(sizeof(char) * len); + if (!add_var->val.s.s) { + LOG(L_ERR, "ERROR: new_add_var(): Not enough memory\n"); + goto error; + } + memcpy(add_var->val.s.s, ((str *)val)->s, len); + } else { + add_var->val.s.s = NULL; } add_var->val.s.len = len; - memcpy(add_var->val.s.s, ((str *)val)->s, len); break;
case CFG_VAR_STRING: - len = strlen((char *)val); - add_var->val.ch = (char *)pkg_malloc(sizeof(char) * (len + 1)); - if (!add_var->val.ch) { - LOG(L_ERR, "ERROR: new_add_var(): Not enough memory\n"); - goto error; + if (val) { + len = strlen((char *)val); + add_var->val.ch = (char *)pkg_malloc(sizeof(char) * (len + 1)); + if (!add_var->val.ch) { + LOG(L_ERR, "ERROR: new_add_var(): Not enough memory\n"); + goto error; + } + memcpy(add_var->val.ch, (char *)val, len); + add_var->val.ch[len] = '\0'; + } else { + add_var->val.ch = NULL; } - memcpy(add_var->val.ch, (char *)val, len); - add_var->val.ch[len] = '\0'; break;
default: