summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xcontrib/scripts/install_prereq36
-rw-r--r--main/astobj2_container.c29
-rw-r--r--main/ccss.c17
-rw-r--r--main/channel.c12
-rw-r--r--main/cli.c24
-rw-r--r--main/pbx_app.c27
6 files changed, 94 insertions, 51 deletions
diff --git a/contrib/scripts/install_prereq b/contrib/scripts/install_prereq
index dae8dee68..e588d5cd1 100755
--- a/contrib/scripts/install_prereq
+++ b/contrib/scripts/install_prereq
@@ -67,6 +67,22 @@ PACKAGES_SUSE="$PACKAGES_SUSE wget subversion"
PACKAGES_SUSE="$PACKAGES_SUSE bzip2 patch python-devel"
# Basic build system:
+PACKAGES_ARCH="make gcc pkg-config"
+# Asterisk: basic requirements:
+PACKAGES_ARCH="$PACKAGES_ARCH libedit jansson libutil-linux libxml2 sqlite"
+# Asterisk: for addons:
+PACKAGES_ARCH="$PACKAGES_ARCH speex speexdsp libogg libvorbis alsa-lib portaudio curl xmlstarlet bison flex"
+PACKAGES_ARCH="$PACKAGES_ARCH postgresql-libs unixodbc libtool neon gmime lua uriparser libxslt openssl"
+PACKAGES_ARCH="$PACKAGES_ARCH libmariadbclient bluez-libs radcli freetds bash"
+PACKAGES_ARCH="$PACKAGES_ARCH net-snmp libnewt popt libical spandsp"
+PACKAGES_ARCH="$PACKAGES_ARCH c-client binutils libsrtp gsm doxygen graphviz zlib libldap"
+PACKAGES_ARCH="$PACKAGES_ARCH fftw libsndfile unbound"
+# Asterisk: for the unpackaged below:
+PACKAGES_ARCH="$PACKAGES_ARCH wget subversion"
+# Asterisk: for ./configure --with-pjproject-bundled:
+PACKAGES_ARCH="$PACKAGES_ARCH bzip2 patch python2"
+
+# Basic build system:
PACKAGES_NBSD="gmake pkg-config"
# Asterisk: basic requirements:
PACKAGES_NBSD="$PACKAGES_NBSD editline jansson sqlite3 libuuid libxml2"
@@ -163,6 +179,15 @@ check_installed_rpms() {
done
}
+check_installed_pacman() {
+ for pack in "$@"
+ do
+ if ! pacman -Q --explicit $pack >/dev/null 2>/dev/null
+ then echo $pack
+ fi
+ done
+}
+
check_installed_pkgs() {
for pack in "$@"
do
@@ -208,6 +233,13 @@ handle_rh() {
fi
}
+handle_arch() {
+ extra_packs=`check_installed_pacman $PACKAGES_ARCH`
+ if [ x"$extra_packs" != "x" ] ; then
+ $testcmd pacman -S --asexplicit --noconfirm $extra_packs
+ fi
+}
+
handle_nbsd() {
extra_packs=`check_installed_pkgs $PACKAGES_NBSD`
if [ x"$extra_packs" != "x" ] ; then
@@ -334,6 +366,10 @@ elif [ -f /etc/SuSE-release -o -f /etc/novell-release ]; then
handle_SUSE
elif [ -f /etc/os-release ] && . /etc/os-release && [ "$ID" = "opensuse" ]; then
handle_SUSE
+elif [ -r /etc/arch-release ]; then
+ handle_arch
+elif [ -f /etc/os-release ] && . /etc/os-release && [ "$ID_LIKE" = "archlinux" ]; then
+ handle_arch # $ID=arch
elif [ "$OS" = 'NetBSD' ]; then
handle_nbsd
elif [ "$OS" = 'OpenBSD' ]; then
diff --git a/main/astobj2_container.c b/main/astobj2_container.c
index ae647d2dd..9bea58f74 100644
--- a/main/astobj2_container.c
+++ b/main/astobj2_container.c
@@ -935,12 +935,15 @@ void ao2_container_unregister(const char *name)
}
#if defined(AO2_DEBUG)
-static int ao2_complete_reg_cb(void *obj, void *arg, void *data, int flags)
+static int ao2_complete_reg_cb(void *obj, void *arg, int flags)
{
- struct ao2_reg_match *which = data;
+ struct ao2_reg_container *reg = obj;
- /* ao2_reg_sort_cb() has already filtered the search to matching keys */
- return (which->find_nth < ++which->count) ? (CMP_MATCH | CMP_STOP) : 0;
+ if (ast_cli_completion_add(ast_strdup(reg->name))) {
+ return CMP_STOP;
+ }
+
+ return 0;
}
#endif /* defined(AO2_DEBUG) */
@@ -948,9 +951,6 @@ static int ao2_complete_reg_cb(void *obj, void *arg, void *data, int flags)
static char *complete_container_names(struct ast_cli_args *a)
{
struct ao2_reg_partial_key partial_key;
- struct ao2_reg_match which;
- struct ao2_reg_container *reg;
- char *name;
if (a->pos != 3) {
return NULL;
@@ -958,17 +958,10 @@ static char *complete_container_names(struct ast_cli_args *a)
partial_key.len = strlen(a->word);
partial_key.name = a->word;
- which.find_nth = a->n;
- which.count = 0;
- reg = ao2_t_callback_data(reg_containers, partial_key.len ? OBJ_SEARCH_PARTIAL_KEY : 0,
- ao2_complete_reg_cb, &partial_key, &which, "Find partial registered container");
- if (reg) {
- name = ast_strdup(reg->name);
- ao2_t_ref(reg, -1, "Done with registered container object.");
- } else {
- name = NULL;
- }
- return name;
+ ao2_callback(reg_containers, partial_key.len ? OBJ_SEARCH_PARTIAL_KEY : 0,
+ ao2_complete_reg_cb, &partial_key);
+
+ return NULL;
}
#endif /* defined(AO2_DEBUG) */
diff --git a/main/ccss.c b/main/ccss.c
index ed0bba7f5..fa569aaa0 100644
--- a/main/ccss.c
+++ b/main/ccss.c
@@ -4547,11 +4547,9 @@ static int kill_cores(void *obj, void *arg, int flags)
return 0;
}
-static char *complete_core_id(const char *line, const char *word, int pos, int state)
+static char *complete_core_id(const char *word)
{
- int which = 0;
int wordlen = strlen(word);
- char *ret = NULL;
struct ao2_iterator core_iter = ao2_iterator_init(cc_core_instances, 0);
struct cc_core_instance *core_instance;
@@ -4559,15 +4557,16 @@ static char *complete_core_id(const char *line, const char *word, int pos, int s
cc_unref(core_instance, "CLI tab completion iteration")) {
char core_id_str[20];
snprintf(core_id_str, sizeof(core_id_str), "%d", core_instance->core_id);
- if (!strncmp(word, core_id_str, wordlen) && ++which > state) {
- ret = ast_strdup(core_id_str);
- cc_unref(core_instance, "Found a matching core ID for CLI tab-completion");
- break;
+ if (!strncmp(word, core_id_str, wordlen)) {
+ if (ast_cli_completion_add(ast_strdup(core_id_str))) {
+ cc_unref(core_instance, "Found a matching core ID for CLI tab-completion");
+ break;
+ }
}
}
ao2_iterator_destroy(&core_iter);
- return ret;
+ return NULL;
}
static char *handle_cc_kill(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
@@ -4583,7 +4582,7 @@ static char *handle_cc_kill(struct ast_cli_entry *e, int cmd, struct ast_cli_arg
return NULL;
case CLI_GENERATE:
if (a->pos == 3 && !strcasecmp(a->argv[2], "core")) {
- return complete_core_id(a->line, a->word, a->pos, a->n);
+ return complete_core_id(a->word);
}
return NULL;
}
diff --git a/main/channel.c b/main/channel.c
index 2779aa827..304fae18a 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -304,25 +304,23 @@ static char *handle_cli_core_show_channeltypes(struct ast_cli_entry *e, int cmd,
static char *complete_channeltypes(struct ast_cli_args *a)
{
struct chanlist *cl;
- int which = 0;
int wordlen;
- char *ret = NULL;
- if (a->pos != 3)
+ if (a->pos != 3) {
return NULL;
+ }
wordlen = strlen(a->word);
AST_RWLIST_RDLOCK(&backends);
AST_RWLIST_TRAVERSE(&backends, cl, list) {
- if (!strncasecmp(a->word, cl->tech->type, wordlen) && ++which > a->n) {
- ret = ast_strdup(cl->tech->type);
- break;
+ if (!strncasecmp(a->word, cl->tech->type, wordlen)) {
+ ast_cli_completion_add(ast_strdup(cl->tech->type));
}
}
AST_RWLIST_UNLOCK(&backends);
- return ret;
+ return NULL;
}
/*! \brief Show details about a channel driver - CLI command */
diff --git a/main/cli.c b/main/cli.c
index 80c184328..e46d3427c 100644
--- a/main/cli.c
+++ b/main/cli.c
@@ -1655,8 +1655,15 @@ char *ast_cli_complete(const char *word, const char * const choices[], int state
len = ast_strlen_zero(word) ? 0 : strlen(word);
for (i = 0; choices[i]; i++) {
- if ((!len || !strncasecmp(word, choices[i], len)) && ++which > state)
- return ast_strdup(choices[i]);
+ if ((!len || !strncasecmp(word, choices[i], len)) && ++which > state) {
+ if (state != -1) {
+ return ast_strdup(choices[i]);
+ }
+
+ if (ast_cli_completion_add(ast_strdup(choices[i]))) {
+ return NULL;
+ }
+ }
}
return NULL;
}
@@ -1682,9 +1689,16 @@ char *ast_complete_channels(const char *line, const char *word, int pos, int sta
struct ast_channel_snapshot *snapshot = stasis_message_data(msg);
if (!strncasecmp(word, snapshot->name, wordlen) && (++which > state)) {
- ret = ast_strdup(snapshot->name);
- ao2_ref(msg, -1);
- break;
+ if (state != -1) {
+ ret = ast_strdup(snapshot->name);
+ ao2_ref(msg, -1);
+ break;
+ }
+
+ if (ast_cli_completion_add(ast_strdup(snapshot->name))) {
+ ao2_ref(msg, -1);
+ break;
+ }
}
}
ao2_iterator_destroy(&iter);
diff --git a/main/pbx_app.c b/main/pbx_app.c
index ec6bc7589..df8126c7f 100644
--- a/main/pbx_app.c
+++ b/main/pbx_app.c
@@ -275,7 +275,7 @@ static char *handle_show_application(struct ast_cli_entry *e, int cmd, struct as
* application at one time. You can type 'show application Dial Echo' and
* you will see informations about these two applications ...
*/
- return ast_complete_applications(a->line, a->word, a->n);
+ return ast_complete_applications(a->line, a->word, -1);
}
if (a->argc < 4) {
@@ -437,20 +437,23 @@ char *ast_complete_applications(const char *line, const char *word, int state)
AST_RWLIST_RDLOCK(&apps);
AST_RWLIST_TRAVERSE(&apps, app, list) {
cmp = strncasecmp(word, app->name, wordlen);
- if (cmp > 0) {
- continue;
- }
- if (!cmp) {
+ if (cmp < 0) {
+ /* No more matches. */
+ break;
+ } else if (!cmp) {
/* Found match. */
- if (++which <= state) {
- /* Not enough matches. */
- continue;
+ if (state != -1) {
+ if (++which <= state) {
+ /* Not enough matches. */
+ continue;
+ }
+ ret = ast_strdup(app->name);
+ break;
+ }
+ if (ast_cli_completion_add(ast_strdup(app->name))) {
+ break;
}
- ret = ast_strdup(app->name);
- break;
}
- /* Not in container. */
- break;
}
AST_RWLIST_UNLOCK(&apps);