parse: only escape spaces outside of quotes

When we escape spaces to keep arguments together, only escape when the space is
outside a "" string.

See https://bugzilla.gnome.org/show_bug.cgi?id=673319
This commit is contained in:
Wim Taymans 2012-07-17 09:48:00 +02:00
parent 03fae7e32e
commit fd144c02ab

View file

@ -175,14 +175,21 @@ static gchar *
_gst_parse_escape (const gchar * str) _gst_parse_escape (const gchar * str)
{ {
GString *gstr = NULL; GString *gstr = NULL;
gboolean in_quotes;
g_return_val_if_fail (str != NULL, NULL); g_return_val_if_fail (str != NULL, NULL);
gstr = g_string_sized_new (strlen (str)); gstr = g_string_sized_new (strlen (str));
in_quotes = FALSE;
while (*str) { while (*str) {
if (*str == ' ') if (*str == '"' && (!in_quotes || (in_quotes && *(str - 1) != '\\')))
in_quotes = !in_quotes;
if (*str == ' ' && !in_quotes)
g_string_append_c (gstr, '\\'); g_string_append_c (gstr, '\\');
g_string_append_c (gstr, *str); g_string_append_c (gstr, *str);
str++; str++;
} }
@ -244,6 +251,7 @@ gst_parse_launchv_full (const gchar ** argv, GstParseContext * context,
argvp = argv; argvp = argv;
while (*argvp) { while (*argvp) {
arg = *argvp; arg = *argvp;
GST_DEBUG ("eascaping argument %s", arg);
tmp = _gst_parse_escape (arg); tmp = _gst_parse_escape (arg);
g_string_append (str, tmp); g_string_append (str, tmp);
g_free (tmp); g_free (tmp);