diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-11-01 15:48:42 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-11-01 15:48:42 +0000 |
commit | 45a1cbcbb7aa6721ff76e221d6e220e82438cc92 (patch) | |
tree | 0ffe78f7c661d91e6c9dce97442bdd47a7652f6e /chanvars.c | |
parent | 3dc3cce9e490f7ba207db47b90785db726c87605 (diff) |
Little variable optimizations
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@4144 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'chanvars.c')
-rwxr-xr-x | chanvars.c | 39 |
1 files changed, 13 insertions, 26 deletions
diff --git a/chanvars.c b/chanvars.c index dabfdda51..2f23c4dd1 100755 --- a/chanvars.c +++ b/chanvars.c @@ -21,8 +21,14 @@ struct ast_var_t *ast_var_assign(const char *name, const char *value) { int i; struct ast_var_t *var; + int len; - var = malloc(sizeof(struct ast_var_t)); + len = sizeof(struct ast_var_t); + + len += strlen(name) + 1; + len += strlen(value) + 1; + + var = malloc(len); if (var == NULL) { @@ -30,41 +36,22 @@ struct ast_var_t *ast_var_assign(const char *name, const char *value) return NULL; } - i = strlen(value); - var->value = malloc(i + 1); - if (var->value == NULL) - { - ast_log(LOG_WARNING, "Out of memory\n"); - free(var); - return NULL; - } - - strncpy(var->value, value, i); - var->value[i] = '\0'; - i = strlen(name); - var->name = malloc(i + 1); - if (var->name == NULL) - { - ast_log(LOG_WARNING, "Out of memory\n"); - free(var->value); - free(var); - return NULL; - } - strncpy(var->name, name, i); var->name[i] = '\0'; + var->value = var->name + i + 1; + + i = strlen(value); + strncpy(var->value, value, i); + var->value[i] = '\0'; + return var; } void ast_var_delete(struct ast_var_t *var) { if (var == NULL) return; - - if (var->name != NULL) free(var->name); - if (var->value != NULL) free(var->value); - free(var); } |