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 | |
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')
-rw-r--r-- | main/app.c | 12 | ||||
-rw-r--r-- | main/global_datastores.c | 38 |
2 files changed, 46 insertions, 4 deletions
diff --git a/main/app.c b/main/app.c index ffad73507..33083649f 100644 --- a/main/app.c +++ b/main/app.c @@ -1387,6 +1387,18 @@ char *ast_read_textfile(const char *filename) return output; } +void ast_app_options2str(const struct ast_app_option *options, struct ast_flags *flags, char *buf, size_t len) +{ + unsigned int i, found = 0; + + for (i = 32; i < 128 && found < len;i++) { + if (ast_test_flag(flags, options[i].flag)) { + buf[found++] = i; + } + } + buf[found] = '\0'; +} + int ast_app_parse_options(const struct ast_app_option *options, struct ast_flags *flags, char **args, char *optstr) { char *s; 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, +}; |