updated: [fe95221] Rewrote the shell_escape function in order to make us of GString and g_string_append_c

Patrick Winnertz winnie at debian.org
Tue Feb 10 11:49:57 UTC 2009


The following commit has been merged in the master branch:
commit fe95221f05e3cc4a80effdcb886768a9eb77efa7
Author: Patrick Winnertz <winnie at debian.org>
Date:   Fri Feb 6 14:32:09 2009 +0100

    Rewrote the shell_escape function in order to make us of GString and g_string_append_c
    
    As we decided to fully switch back to glb we needed to rewrite this function in order to use
    glib functions. This means in this case mostly that *ptr = c; ptr++; is replaced by something
    like this: g_string_append(str,c); with str a GString*.
    
    Signed-off-by: Patrick Winnertz <winnie at debian.org>

diff --git a/src/util.c b/src/util.c
index 9924f35..96396c0 100644
--- a/src/util.c
+++ b/src/util.c
@@ -1550,16 +1550,18 @@ Q_ (const char *s)
  string for escaping
 
  \returns
- return escaped string (later need to free)
+ return escaped string (which needs to be freed later)
  */
 char*
 shell_escape(const char* src)
 {
+	GString *str;
+	char *result = NULL;
+
 	if ((src==NULL)||(!(*src)))
 		return strdup("");
 
-	char* buffer = calloc(1, strlen(src)*2+2);
-	char* ptr = buffer;
+	str = g_string_new("");
 
 	/* look for the first char to escape */
 	while (1)
@@ -1568,19 +1570,19 @@ shell_escape(const char* src)
 		/* copy over all chars not to escape */
 		while ((c=(*src)) && shell_escape_nottoesc(c))
 		{
-			*ptr = c;
-			ptr++;
+			g_string_append_c(str,c);
 			src++;
 		}
 
 		/* at this point we either have an \0 or an char to escape */
-		if (!c)
-			return buffer;
+		if (!c) {
+			result = str->str;
+			g_string_free(str,FALSE);
+			return result;
+		}
 
-		*ptr = '\\';
-		ptr++;
-		*ptr = c;
-		ptr++;
+		g_string_append_c(str,'\\');
+		g_string_append_c(str,c);
 		src++;
 	}
 }

-- 
Midnight Commander Development



More information about the mc-devel mailing list