Added the possibility to escape chars in gstparse. You can now give it a cmdline like disksrc location=some\ sort\ of...

Original commit message from CVS:
Added the possibility to escape chars in gstparse. You can now give it a
cmdline like disksrc location=some\ sort\ of.mp3 ! .... and it does the
right thing.
This commit is contained in:
Wim Taymans 2001-05-20 20:05:29 +00:00
parent 90c0acec1c
commit 704918c3fa

View file

@ -354,6 +354,7 @@ gst_parse_launch(const gchar *cmdline,GstBin *parent)
gint newargc;
gint i;
const gchar *cp, *start, *end;
gchar *temp;
GSList *string_list = NULL, *slist;
priv.bincount = 0;
@ -366,20 +367,32 @@ gst_parse_launch(const gchar *cmdline,GstBin *parent)
end = cmdline + strlen(cmdline);
newargc = 0;
temp = "";
// Extract the arguments to a gslist in reverse order
for (cp = cmdline; cp < end; ) {
i = strcspn(cp, "([{}]) \"");
i = strcspn(cp, "([{}]) \"\\");
if (i > 0) {
// normal argument - copy and add to the list
string_list = g_slist_prepend(string_list, g_strndup(cp, i));
newargc++;
temp = g_strconcat (temp, g_strndup (cp, i), NULL);
// see if we have an escape char
if (cp[i] != '\\') {
// normal argument - copy and add to the list
string_list = g_slist_prepend(string_list, temp);
newargc++;
temp = "";
}
else {
temp = g_strconcat (temp, g_strndup (&cp[++i], 1), NULL);
}
cp += i;
}
// skip spaces
while (cp < end && *cp == ' ')
while (cp < end && *cp == ' ') {
cp++;
}
// handle quoted arguments
if (*cp == '"') {