summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xapp.c29
-rwxr-xr-xinclude/asterisk/app.h13
2 files changed, 33 insertions, 9 deletions
diff --git a/app.c b/app.c
index bc16d6ee5..cfca2bd75 100755
--- a/app.c
+++ b/app.c
@@ -1069,16 +1069,29 @@ int ast_app_group_match_get_count(char *groupmatch, char *category)
int ast_separate_app_args(char *buf, char delim, char **array, int arraylen)
{
- int x = 0;
- memset(array, 0, arraylen * sizeof(char *));
- if (!buf)
+ int x;
+ char *scan;
+ char delims[2];
+
+ if (!buf || !array || !arraylen)
return 0;
- for (array[x] = buf ; x < arraylen && array[x]; x++) {
- if ((array[x+1] = strchr(array[x], delim))) {
- *array[x+1] = '\0';
- array[x+1]++;
- }
+
+ memset(array, 0, arraylen * sizeof(*array));
+
+ scan = buf;
+ delims[0] = delim;
+ delims[1] = '\0';
+ x = 0;
+
+ while (x < arraylen - 1) {
+ array[x] = strsep(&scan, delims);
+ x++;
+ if (!scan)
+ break;
}
+
+ array[x++] = scan;
+
return x;
}
diff --git a/include/asterisk/app.h b/include/asterisk/app.h
index b50dfe36b..8d571e28e 100755
--- a/include/asterisk/app.h
+++ b/include/asterisk/app.h
@@ -162,7 +162,18 @@ int ast_app_group_get_count(char *group, char *category);
/*! Get the current channel count of all groups that match the specified pattern and category. */
int ast_app_group_match_get_count(char *groupmatch, char *category);
-/*! Create an argc argv type structure for app args */
+/*!
+ \brief Separate a string into arguments in an array
+ \param buf The string to be parsed (this must be a writable copy, as it will be modified)
+ \param delim The character to be used to delimit arguments
+ \param array An array of 'char *' to be filled in with pointers to the found arguments
+ \param arraylen The number of elements in the array (i.e. the number of arguments you will accept)
+
+ Note: if there are more arguments in the string than the array will hold, the last element of
+ the array will contain the remaining arguments, not separated.
+
+ \return The number of arguments found, or zero if the function arguments are not valid.
+*/
int ast_separate_app_args(char *buf, char delim, char **array, int arraylen);
/*! Present a dialtone and collect a certain length extension. Returns 1 on valid extension entered, -1 on hangup, or 0 on invalid extension. Note that if 'collect' holds digits already, new digits will be appended, so be sure it's initialized properly */