From 650b11cd1979bd888f4b51d0475d522dfcf0ec57 Mon Sep 17 00:00:00 2001 From: Bradford Hovinen Date: Sun, 8 Oct 2000 18:56:27 +0000 Subject: [PATCH] Implement (show_screensaver): Call fix_arguments to handle quoted strings 2000-10-08 Bradford Hovinen * preview.c (fix_arguments): Implement (show_screensaver): Call fix_arguments to handle quoted strings in the command line --- capplets/screensaver/ChangeLog | 6 ++++ capplets/screensaver/preview.c | 41 ++++++++++++++++++++++ capplets/screensaver/screensavers/flag.xml | 6 ++-- 3 files changed, 50 insertions(+), 3 deletions(-) diff --git a/capplets/screensaver/ChangeLog b/capplets/screensaver/ChangeLog index c52687bd8..732ce7629 100644 --- a/capplets/screensaver/ChangeLog +++ b/capplets/screensaver/ChangeLog @@ -1,3 +1,9 @@ +2000-10-08 Bradford Hovinen + + * preview.c (fix_arguments): Implement + (show_screensaver): Call fix_arguments to handle quoted strings in + the command line + 2000-10-07 Bradford Hovinen * screensaver-prefs-dialog.c (set_widgets_sensitive): Set diff --git a/capplets/screensaver/preview.c b/capplets/screensaver/preview.c index c1ca6ed95..6f878c882 100644 --- a/capplets/screensaver/preview.c +++ b/capplets/screensaver/preview.c @@ -143,6 +143,46 @@ add_window_arg (char **args, GdkWindow *window) return args; } +/* fix_arguments + * + * Given an array of CLI arguments naively split, convert them into actual CLI + * arguments. Note: leaks memory a lot. + */ + +static char ** +fix_arguments (char **argv) +{ + char **out; + gchar *tmp, *tmp1; + int i, j, argc; + + for (argc = 0; argv[argc]; argc++); + + out = g_new0 (char *, argc + 1); + + for (i = 0, j = 0; i < argc; i++) { + if (argv[i][0] != '\"') { + out[j++] = argv[i]; + } else { + tmp = g_strdup (argv[i] + 1); + while (i < argc) { + if (argv[i][strlen (argv[i]) - 1] == '\"') { + tmp[strlen (tmp) - 1] = '\0'; + break; + } + i++; + tmp1 = g_strconcat (tmp, " ", argv[i], NULL); + g_free (tmp); + tmp = tmp1; + } + + out[j++] = tmp; + } + } + + return out; +} + /* show_screensaver * * Given a GdkWindow in which to render and a particular screensaver, @@ -164,6 +204,7 @@ show_screensaver (GdkWindow *window, Screensaver *saver, pid_t *pid) nice (20); /* Very low priority */ args = g_strsplit (saver->command_line, " ", -1); + args = fix_arguments (args); args = strip_arg (args, "-root"); args = add_window_arg (args, window); diff --git a/capplets/screensaver/screensavers/flag.xml b/capplets/screensaver/screensavers/flag.xml index e7a9b21f0..fb2b08cb1 100644 --- a/capplets/screensaver/screensavers/flag.xml +++ b/capplets/screensaver/screensavers/flag.xml @@ -7,8 +7,8 @@ - - + + @@ -41,7 +41,7 @@ default="64"/>