summaryrefslogtreecommitdiff
path: root/main/strings.c
diff options
context:
space:
mode:
authorCorey Farrell <git@cfware.com>2017-11-19 21:10:09 -0500
committerCorey Farrell <git@cfware.com>2018-01-15 13:25:45 -0500
commit35ae99c712d2b0de2f780269fbabf8ceaf8c11ec (patch)
treef5db97084e6c5a4a2799e1f9080fff84d0baaeff /main/strings.c
parent6f1f16d88720db2f0c29f323dce2ba065cb0c9ce (diff)
vector: Additional string vector definitions.
ast_vector_string_split: This function will add items to an ast_vector_string by splitting values of a string buffer. Items are appended to the vector in the order they are found. ast_vector_const_string: A vector of 'const char *'. Change-Id: I1bf02a1efeb2baeea11c59c557d39dd1197494d7
Diffstat (limited to 'main/strings.c')
-rw-r--r--main/strings.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/main/strings.c b/main/strings.c
index 82e315aea..ad96df249 100644
--- a/main/strings.c
+++ b/main/strings.c
@@ -40,6 +40,7 @@
#include <regex.h>
#include "asterisk/strings.h"
#include "asterisk/pbx.h"
+#include "asterisk/vector.h"
/*!
* core handler for dynamic strings.
@@ -389,3 +390,44 @@ char *ast_read_line_from_buffer(char **buffer)
return start;
}
+
+int ast_vector_string_split(struct ast_vector_string *dest,
+ const char *input, const char *delim, int flags,
+ int (*excludes_cmp)(const char *s1, const char *s2))
+{
+ char *buf;
+ char *cur;
+ int no_trim = flags & AST_VECTOR_STRING_SPLIT_NO_TRIM;
+ int allow_empty = flags & AST_VECTOR_STRING_SPLIT_ALLOW_EMPTY;
+
+ ast_assert(dest != NULL);
+ ast_assert(!ast_strlen_zero(delim));
+
+ if (ast_strlen_zero(input)) {
+ return 0;
+ }
+
+ buf = ast_strdupa(input);
+ while ((cur = strsep(&buf, delim))) {
+ if (!no_trim) {
+ cur = ast_strip(cur);
+ }
+
+ if (!allow_empty && ast_strlen_zero(cur)) {
+ continue;
+ }
+
+ if (excludes_cmp && AST_VECTOR_GET_CMP(dest, cur, !excludes_cmp)) {
+ continue;
+ }
+
+ cur = ast_strdup(cur);
+ if (!cur || AST_VECTOR_APPEND(dest, cur)) {
+ ast_free(cur);
+
+ return -1;
+ }
+ }
+
+ return 0;
+}