Index: addons/app_mysql.c =================================================================== --- addons/app_mysql.c (revision 376383) +++ addons/app_mysql.c (working copy) @@ -283,16 +283,17 @@ return res; } -static int aMYSQL_set(struct ast_channel *chan, char *data) +static int aMYSQL_set(struct ast_channel *chan, const char *data) { - char *var, *tmp; + char *var, *tmp, *parse; AST_DECLARE_APP_ARGS(args, AST_APP_ARG(set); AST_APP_ARG(variable); AST_APP_ARG(value); ); - AST_NONSTANDARD_APP_ARGS(args, data, ' '); + parse = ast_strdupa(data); + AST_NONSTANDARD_APP_ARGS(args, parse, ' '); if (args.argc == 3) { var = ast_alloca(6 + strlen(args.variable) + 1); @@ -308,7 +309,7 @@ } /* MYSQL operations */ -static int aMYSQL_connect(struct ast_channel *chan, char *data) +static int aMYSQL_connect(struct ast_channel *chan, const char *data) { AST_DECLARE_APP_ARGS(args, AST_APP_ARG(connect); @@ -322,8 +323,9 @@ MYSQL *mysql; int timeout; const char *ctimeout; + char *parse = ast_strdupa(data); - AST_NONSTANDARD_APP_ARGS(args, data, ' '); + AST_NONSTANDARD_APP_ARGS(args, parse, ' '); if (args.argc < 6) { ast_log(LOG_WARNING, "MYSQL_connect is missing some arguments\n"); @@ -366,7 +368,7 @@ return 0; } -static int aMYSQL_query(struct ast_channel *chan, char *data) +static int aMYSQL_query(struct ast_channel *chan, const char *data) { AST_DECLARE_APP_ARGS(args, AST_APP_ARG(query); @@ -378,8 +380,9 @@ MYSQL_RES *mysqlres; int connid; int mysql_query_res; + char *parse = ast_strdupa(data); - AST_NONSTANDARD_APP_ARGS(args, data, ' '); + AST_NONSTANDARD_APP_ARGS(args, parse, ' '); if (args.argc != 4 || (connid = atoi(args.connid)) == 0) { ast_log(LOG_WARNING, "missing some arguments\n"); @@ -407,7 +410,7 @@ return -1; } -static int aMYSQL_nextresult(struct ast_channel *chan, char *data) +static int aMYSQL_nextresult(struct ast_channel *chan, const char *data) { MYSQL *mysql; MYSQL_RES *mysqlres; @@ -417,8 +420,9 @@ AST_APP_ARG(connid); ); int connid = -1; + char *parse = ast_strdupa(data); - AST_NONSTANDARD_APP_ARGS(args, data, ' '); + AST_NONSTANDARD_APP_ARGS(args, parse, ' '); sscanf(args.connid, "%30d", &connid); if (args.argc != 3 || connid <= 0) { @@ -447,7 +451,7 @@ } -static int aMYSQL_fetch(struct ast_channel *chan, char *data) +static int aMYSQL_fetch(struct ast_channel *chan, const char *data) { MYSQL_RES *mysqlres; MYSQL_ROW mysqlrow; @@ -499,13 +503,14 @@ return -1; } -static int aMYSQL_clear(struct ast_channel *chan, char *data) +static int aMYSQL_clear(struct ast_channel *chan, const char *data) { MYSQL_RES *mysqlres; int id; - strsep(&data, " "); /* eat the first token, we already know it :P */ - id = safe_scan_int(&data, " \n", -1); + char *parse = ast_strdupa(data); + strsep(&parse, " "); /* eat the first token, we already know it :P */ + id = safe_scan_int(&parse, " \n", -1); if ((mysqlres = find_identifier(id, AST_MYSQL_ID_RESID)) == NULL) { ast_log(LOG_WARNING, "Invalid result identifier %d passed in aMYSQL_clear\n", id); } else { @@ -516,13 +521,14 @@ return 0; } -static int aMYSQL_disconnect(struct ast_channel *chan, char *data) +static int aMYSQL_disconnect(struct ast_channel *chan, const char *data) { MYSQL *mysql; int id; - strsep(&data, " "); /* eat the first token, we already know it :P */ + char *parse = ast_strdupa(data); + strsep(&parse, " "); /* eat the first token, we already know it :P */ - id = safe_scan_int(&data, " \n", -1); + id = safe_scan_int(&parse, " \n", -1); if ((mysql = find_identifier(id, AST_MYSQL_ID_CONNID)) == NULL) { ast_log(LOG_WARNING, "Invalid connection identifier %d passed in aMYSQL_disconnect\n", id); } else { @@ -565,19 +571,19 @@ ast_mutex_lock(&_mysql_mutex); if (strncasecmp("connect", data, strlen("connect")) == 0) { - result = aMYSQL_connect(chan, ast_strdupa(data)); + result = aMYSQL_connect(chan, data); } else if (strncasecmp("query", data, strlen("query")) == 0) { - result = aMYSQL_query(chan, ast_strdupa(data)); + result = aMYSQL_query(chan, data); } else if (strncasecmp("nextresult", data, strlen("nextresult")) == 0) { - result = aMYSQL_nextresult(chan, ast_strdupa(data)); + result = aMYSQL_nextresult(chan, data); } else if (strncasecmp("fetch", data, strlen("fetch")) == 0) { - result = aMYSQL_fetch(chan, ast_strdupa(data)); + result = aMYSQL_fetch(chan, data); } else if (strncasecmp("clear", data, strlen("clear")) == 0) { - result = aMYSQL_clear(chan, ast_strdupa(data)); + result = aMYSQL_clear(chan, data); } else if (strncasecmp("disconnect", data, strlen("disconnect")) == 0) { - result = aMYSQL_disconnect(chan, ast_strdupa(data)); + result = aMYSQL_disconnect(chan, data); } else if (strncasecmp("set", data, 3) == 0) { - result = aMYSQL_set(chan, ast_strdupa(data)); + result = aMYSQL_set(chan, data); } else { ast_log(LOG_WARNING, "Unknown argument to MYSQL application : %s\n", data); result = -1;