Module: sip-router
Branch: master
Commit: eedafa45ff4040d0a0f362b8fac6604be63ed7d7
URL:
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=eedafa4…
Author: Miklos Tirpak <miklos(a)iptel.org>
Committer: Miklos Tirpak <miklos(a)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: