diff options
author | twilson <twilson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-06-11 23:47:23 +0000 |
---|---|---|
committer | twilson <twilson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-06-11 23:47:23 +0000 |
commit | 54034751542eb884cb134a826244eca9680765ea (patch) | |
tree | be1898af8b75b8f1bfe8692a851dcede310ecaa8 /main/global_datastores.c | |
parent | 02e87fc6524c2df91cfa8662689f3b33985e3eae (diff) |
Backport fix for 11520--for some reason I didn't do this back in February when I patched for trunk.
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@121992 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main/global_datastores.c')
-rw-r--r-- | main/global_datastores.c | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/main/global_datastores.c b/main/global_datastores.c index 9b87b2cb4..ca04a0fe9 100644 --- a/main/global_datastores.c +++ b/main/global_datastores.c @@ -35,8 +35,9 @@ static void dialed_interface_destroy(void *data) struct ast_dialed_interface *di = NULL; AST_LIST_HEAD(, ast_dialed_interface) *dialed_interface_list = data; - if (!dialed_interface_list) + if (!dialed_interface_list) { return; + } AST_LIST_LOCK(dialed_interface_list); while ((di = AST_LIST_REMOVE_HEAD(dialed_interface_list, list))) @@ -53,11 +54,13 @@ static void *dialed_interface_duplicate(void *data) AST_LIST_HEAD(, ast_dialed_interface) *old_list; AST_LIST_HEAD(, ast_dialed_interface) *new_list = NULL; - if(!(old_list = data)) + if(!(old_list = data)) { return NULL; + } - if(!(new_list = ast_calloc(1, sizeof(*new_list)))) + if(!(new_list = ast_calloc(1, sizeof(*new_list)))) { return NULL; + } AST_LIST_HEAD_INIT(new_list); AST_LIST_LOCK(old_list); @@ -76,8 +79,35 @@ static void *dialed_interface_duplicate(void *data) return new_list; } + +static void *dial_features_duplicate(void *data) +{ + struct ast_dial_features *df = data, *df_copy; + + if (!(df_copy = ast_calloc(1, sizeof(*df)))) { + return NULL; + } + + memcpy(df_copy, df, sizeof(*df)); + + return df_copy; +} + +static void dial_features_destroy(void *data) { + struct ast_dial_features *df = data; + if (df) { + ast_free(df); + } +} + const struct ast_datastore_info dialed_interface_info = { - .type ="dialed-interface", + .type = "dialed-interface", .destroy = dialed_interface_destroy, .duplicate = dialed_interface_duplicate, }; + +const struct ast_datastore_info dial_features_info = { + .type = "dial-features", + .destroy = dial_features_destroy, + .duplicate = dial_features_duplicate, +}; |