Revision
14958
Author
brian
Date
2009-09-23 12:32:01 -0500 (Wed, 23 Sep 2009)

Log Message

 FSCORE-446 

Modified Paths

Diff

Modified: freeswitch/trunk/src/include/switch_utils.h (14957 => 14958)


--- freeswitch/trunk/src/include/switch_utils.h	2009-09-23 17:04:39 UTC (rev 14957)
+++ freeswitch/trunk/src/include/switch_utils.h	2009-09-23 17:32:01 UTC (rev 14958)
@@ -545,6 +545,13 @@
 SWITCH_DECLARE(char *) switch_string_replace(const char *string, const char *search, const char *replace);
 SWITCH_DECLARE(switch_status_t) switch_string_match(const char *string, size_t string_len, const char *search, size_t search_len);
 
+/*!
+  \brief Quote shell argument
+  \param string the string to quote (example: a ' b"' c)
+  \return the quoted string (gives: 'a '\'' b"'\'' c' for unices, "a ' b ' c" for MS Windows)
+*/
+SWITCH_DECLARE(char *) switch_util_quote_shell_arg(const char *string);
+
 #define SWITCH_READ_ACCEPTABLE(status) (status == SWITCH_STATUS_SUCCESS || status == SWITCH_STATUS_BREAK)
 SWITCH_DECLARE(size_t) switch_url_encode(const char *url, char *buf, size_t len);
 SWITCH_DECLARE(char *) switch_url_decode(char *s);

Modified: freeswitch/trunk/src/mod/asr_tts/mod_tts_commandline/mod_tts_commandline.c (14957 => 14958)


--- freeswitch/trunk/src/mod/asr_tts/mod_tts_commandline/mod_tts_commandline.c	2009-09-23 17:04:39 UTC (rev 14957)
+++ freeswitch/trunk/src/mod/asr_tts/mod_tts_commandline/mod_tts_commandline.c	2009-09-23 17:32:01 UTC (rev 14958)
@@ -32,8 +32,6 @@
 #include <unistd.h>
 #include <switch.h>
 
-SWITCH_DECLARE(char *) switch_escape_shell_arg(char *string);
-
 SWITCH_MODULE_LOAD_FUNCTION(mod_tts_commandline_load);
 SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_tts_commandline_shutdown);
 SWITCH_MODULE_DEFINITION(mod_tts_commandline, mod_tts_commandline_load, mod_tts_commandline_shutdown, NULL);
@@ -56,62 +54,6 @@
 typedef struct tts_commandline_data tts_commandline_t;
 
 
-SWITCH_DECLARE(char *) switch_quote_shell_arg(char *string)
-{
-	size_t string_len = strlen(string);
-	size_t i;
-	size_t n = 0;
-	size_t dest_len = string_len + 1; /* +1 for the opening quote  */
-	char *dest, *tmp;
-
-	dest = (char *) malloc(sizeof(char) * dest_len);
-	switch_assert(dest);
-
-#ifdef WIN32
-	dest[n++] = '"';
-#else
-	dest[n++] = '\'';
-#endif
-
-	for (i = 0; i < string_len; i++) {
-		switch (string[i]) {
-#ifdef WIN32
-		case '"':
-		case '%':
-			dest[n++] = ' ';
-			break;
-#else
-		case '\'':
-			/* We replace ' by '\'' */
-			dest_len+=3;
-			tmp = (char *) realloc(dest, sizeof(char) * (dest_len));
-			switch_assert(tmp);
-			dest = tmp;
-			dest[n++] = '\'';
-			dest[n++] = '\\';
-			dest[n++] = '\'';
-			dest[n++] = '\'';
-			break;
-#endif
-		default:
-			dest[n++] = string[i];
-		}
-  }
-  
-	dest_len += 2; /* +2 for the closing quote and the null character */
-	tmp = (char *) realloc(dest, sizeof(char) * (dest_len));
-	switch_assert(tmp);
-	dest = tmp;
-#ifdef WIN32
-	dest[n++] = '"';
-#else
-	dest[n++] = '\'';
-#endif
-	dest[n++] = 0;
-	switch_assert(n == dest_len);
-	return dest;
-}
-
 static int load_tts_commandline_config(void)
 {
 	char *cf = "tts_commandline.conf";
@@ -190,16 +132,16 @@
 	
 	message = switch_core_strdup(sh->memory_pool, globals.command);
 	
-	tmp = switch_quote_shell_arg(text);
+	tmp = switch_util_quote_shell_arg(text);
 	message = switch_string_replace(message, "${text}", tmp);
 	
-	tmp = switch_quote_shell_arg(info->voice_name);
+	tmp = switch_util_quote_shell_arg(info->voice_name);
 	message = switch_string_replace(message, "${voice}", tmp);
 	
 	rate = switch_core_sprintf(sh->memory_pool, "%d", info->rate);
 	message = switch_string_replace(message, "${rate}", rate);
 	
-	tmp = switch_quote_shell_arg(info->file);
+	tmp = switch_util_quote_shell_arg(info->file);
 	message = switch_string_replace(message, "${file}", tmp);
 	
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Executing: %s\n", message);

Modified: freeswitch/trunk/src/switch_utils.c (14957 => 14958)


--- freeswitch/trunk/src/switch_utils.c	2009-09-23 17:04:39 UTC (rev 14957)
+++ freeswitch/trunk/src/switch_utils.c	2009-09-23 17:32:01 UTC (rev 14958)
@@ -1661,6 +1661,62 @@
 	return dest;
 }
 
+SWITCH_DECLARE(char *) switch_util_quote_shell_arg(const char *string)
+{
+	size_t string_len = strlen(string);
+	size_t i;
+	size_t n = 0;
+	size_t dest_len = string_len + 1; /* +1 for the opening quote  */
+	char *dest, *tmp;
+
+	dest = (char *) malloc(sizeof(char) * dest_len);
+	switch_assert(dest);
+
+#ifdef WIN32
+	dest[n++] = '"';
+#else
+	dest[n++] = '\'';
+#endif
+
+	for (i = 0; i < string_len; i++) {
+		switch (string[i]) {
+#ifdef WIN32
+		case '"':
+		case '%':
+			dest[n++] = ' ';
+			break;
+#else
+		case '\'':
+			/* We replace ' by '\'' */
+			dest_len+=3;
+			tmp = (char *) realloc(dest, sizeof(char) * (dest_len));
+			switch_assert(tmp);
+			dest = tmp;
+			dest[n++] = '\'';
+			dest[n++] = '\\';
+			dest[n++] = '\'';
+			dest[n++] = '\'';
+			break;
+#endif
+		default:
+			dest[n++] = string[i];
+		}
+  }
+  
+	dest_len += 2; /* +2 for the closing quote and the null character */
+	tmp = (char *) realloc(dest, sizeof(char) * (dest_len));
+	switch_assert(tmp);
+	dest = tmp;
+#ifdef WIN32
+	dest[n++] = '"';
+#else
+	dest[n++] = '\'';
+#endif
+	dest[n++] = 0;
+	switch_assert(n == dest_len);
+	return dest;
+}
+
 SWITCH_DECLARE(int) switch_socket_waitfor(switch_pollfd_t *poll, int ms)
 {
 	int nsds = 0;