remove lots of useless checks of the result of ast_strdupa
[asterisk/asterisk.git] / apps / app_exec.c
old mode 100755 (executable)
new mode 100644 (file)
index 2a6763b..b2a45dc
@@ -1,22 +1,38 @@
 /*
- * Asterisk -- A telephony toolkit for Linux.
- *
- * Exec application
+ * Asterisk -- An open source telephony toolkit.
  *
  * Copyright (c) 2004 - 2005, Tilghman Lesher.  All rights reserved.
  *
  * Tilghman Lesher <app_exec__v001@the-tilghman.com>
  *
- * $Id$
- *
  * This code is released by the author with no restrictions on usage.
  *
+ * See http://www.asterisk.org for more information about
+ * the Asterisk project. Please do not directly contact
+ * any of the maintainers of this project for assistance;
+ * the project provides a web site, mailing lists and IRC
+ * channels for your use.
+ *
+ */
+
+/*! \file
+ *
+ * \brief Exec application
+ *
+ * \author Tilghman Lesher <app_exec__v001@the-tilghman.com>
+ *
+ * \ingroup applications
  */
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
+
+#include "asterisk.h"
+
+ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
+
 #include "asterisk/file.h"
 #include "asterisk/logger.h"
 #include "asterisk/options.h"
@@ -31,13 +47,14 @@ static char *tdesc = "Executes applications";
 
 static char *app_exec = "Exec";
 
-static char *exec_synopsis = "Exec(Appname(arguments))";
+static char *exec_synopsis = "Executes internal application";
 
 static char *exec_descrip =
-"Exec(appname(arguments))\n"
+"Usage: Exec(appname(arguments))\n"
 "  Allows an arbitrary application to be invoked even when not\n"
-"hardcoded into the dialplan.  Returns whatever value the\n"
-"app returns or a non-zero value when the app cannot be found.\n";
+"hardcoded into the dialplan. To invoke external applications\n"
+"see the application System. Returns whatever value the\n"
+"app returns or a non-zero value if the app cannot be found.\n";
 
 STANDARD_LOCAL_USER;
 
@@ -56,27 +73,22 @@ static int exec_exec(struct ast_channel *chan, void *data)
 
        /* Check and parse arguments */
        if (data) {
-               s = ast_strdupa((char *)data);
+               s = ast_strdupa(data);
+               appname = strsep(&s, "(");
                if (s) {
-                       appname = strsep(&s, "(");
-                       if (s) {
-                               endargs = strrchr(s, ')');
-                               if (endargs)
-                                       *endargs = '\0';
-                               pbx_substitute_variables_helper(chan, s, args, MAXRESULT - 1);
-                       }
-                       if (appname) {
-                               app = pbx_findapp(appname);
-                               if (app) {
-                                       res = pbx_exec(chan, app, args, 1);
-                               } else {
-                                       ast_log(LOG_WARNING, "Could not find application (%s)\n", appname);
-                                       res = -1;
-                               }
+                       endargs = strrchr(s, ')');
+                       if (endargs)
+                               *endargs = '\0';
+                       pbx_substitute_variables_helper(chan, s, args, MAXRESULT - 1);
+               }
+               if (appname) {
+                       app = pbx_findapp(appname);
+                       if (app) {
+                               res = pbx_exec(chan, app, args, 1);
+                       } else {
+                               ast_log(LOG_WARNING, "Could not find application (%s)\n", appname);
+                               res = -1;
                        }
-               } else {
-                       ast_log(LOG_ERROR, "Out of memory\n");
-                       res = -1;
                }
        }
 
@@ -86,8 +98,13 @@ static int exec_exec(struct ast_channel *chan, void *data)
 
 int unload_module(void)
 {
+       int res;
+
+       res = ast_unregister_application(app_exec);
+
        STANDARD_HANGUP_LOCALUSERS;
-       return ast_unregister_application(app_exec);
+
+       return res;
 }
 
 int load_module(void)