mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-03-12 10:45:13 +01:00
Call protect_argv() in do_spawn() instead of in do_spawn_with_pipes() so
2003-09-30 Tor Lillqvist <tml@iki.fi> * glib/gspawn-win32.c (do_spawn): Call protect_argv() in do_spawn() instead of in do_spawn_with_pipes() so that we can use the original argv[0] as the program file name parameter to spawnv() in the shortcut (doing without helper process) code. Fixes problem if GIMP 1.3 was installed in a path with spaces in the name.
This commit is contained in:
parent
8b75e12b13
commit
d007fe41d9
@ -1,3 +1,12 @@
|
|||||||
|
2003-09-30 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
|
* glib/gspawn-win32.c (do_spawn): Call protect_argv() in
|
||||||
|
do_spawn() instead of in do_spawn_with_pipes() so that we can use
|
||||||
|
the original argv[0] as the program file name parameter to
|
||||||
|
spawnv() in the shortcut (doing without helper process)
|
||||||
|
code. Fixes problem if GIMP 1.3 was installed in a path with
|
||||||
|
spaces in the name.
|
||||||
|
|
||||||
Tue Sep 30 15:31:16 2003 Soeren Sandmann <sandmann@daimi.au.dk>
|
Tue Sep 30 15:31:16 2003 Soeren Sandmann <sandmann@daimi.au.dk>
|
||||||
|
|
||||||
* glib/guniprop.c (has_more_above): make the argument const to
|
* glib/guniprop.c (has_more_above): make the argument const to
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
2003-09-30 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
|
* glib/gspawn-win32.c (do_spawn): Call protect_argv() in
|
||||||
|
do_spawn() instead of in do_spawn_with_pipes() so that we can use
|
||||||
|
the original argv[0] as the program file name parameter to
|
||||||
|
spawnv() in the shortcut (doing without helper process)
|
||||||
|
code. Fixes problem if GIMP 1.3 was installed in a path with
|
||||||
|
spaces in the name.
|
||||||
|
|
||||||
Tue Sep 30 15:31:16 2003 Soeren Sandmann <sandmann@daimi.au.dk>
|
Tue Sep 30 15:31:16 2003 Soeren Sandmann <sandmann@daimi.au.dk>
|
||||||
|
|
||||||
* glib/guniprop.c (has_more_above): make the argument const to
|
* glib/guniprop.c (has_more_above): make the argument const to
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
2003-09-30 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
|
* glib/gspawn-win32.c (do_spawn): Call protect_argv() in
|
||||||
|
do_spawn() instead of in do_spawn_with_pipes() so that we can use
|
||||||
|
the original argv[0] as the program file name parameter to
|
||||||
|
spawnv() in the shortcut (doing without helper process)
|
||||||
|
code. Fixes problem if GIMP 1.3 was installed in a path with
|
||||||
|
spaces in the name.
|
||||||
|
|
||||||
Tue Sep 30 15:31:16 2003 Soeren Sandmann <sandmann@daimi.au.dk>
|
Tue Sep 30 15:31:16 2003 Soeren Sandmann <sandmann@daimi.au.dk>
|
||||||
|
|
||||||
* glib/guniprop.c (has_more_above): make the argument const to
|
* glib/guniprop.c (has_more_above): make the argument const to
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
2003-09-30 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
|
* glib/gspawn-win32.c (do_spawn): Call protect_argv() in
|
||||||
|
do_spawn() instead of in do_spawn_with_pipes() so that we can use
|
||||||
|
the original argv[0] as the program file name parameter to
|
||||||
|
spawnv() in the shortcut (doing without helper process)
|
||||||
|
code. Fixes problem if GIMP 1.3 was installed in a path with
|
||||||
|
spaces in the name.
|
||||||
|
|
||||||
Tue Sep 30 15:31:16 2003 Soeren Sandmann <sandmann@daimi.au.dk>
|
Tue Sep 30 15:31:16 2003 Soeren Sandmann <sandmann@daimi.au.dk>
|
||||||
|
|
||||||
* glib/guniprop.c (has_more_above): make the argument const to
|
* glib/guniprop.c (has_more_above): make the argument const to
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
2003-09-30 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
|
* glib/gspawn-win32.c (do_spawn): Call protect_argv() in
|
||||||
|
do_spawn() instead of in do_spawn_with_pipes() so that we can use
|
||||||
|
the original argv[0] as the program file name parameter to
|
||||||
|
spawnv() in the shortcut (doing without helper process)
|
||||||
|
code. Fixes problem if GIMP 1.3 was installed in a path with
|
||||||
|
spaces in the name.
|
||||||
|
|
||||||
Tue Sep 30 15:31:16 2003 Soeren Sandmann <sandmann@daimi.au.dk>
|
Tue Sep 30 15:31:16 2003 Soeren Sandmann <sandmann@daimi.au.dk>
|
||||||
|
|
||||||
* glib/guniprop.c (has_more_above): make the argument const to
|
* glib/guniprop.c (has_more_above): make the argument const to
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
2003-09-30 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
|
* glib/gspawn-win32.c (do_spawn): Call protect_argv() in
|
||||||
|
do_spawn() instead of in do_spawn_with_pipes() so that we can use
|
||||||
|
the original argv[0] as the program file name parameter to
|
||||||
|
spawnv() in the shortcut (doing without helper process)
|
||||||
|
code. Fixes problem if GIMP 1.3 was installed in a path with
|
||||||
|
spaces in the name.
|
||||||
|
|
||||||
Tue Sep 30 15:31:16 2003 Soeren Sandmann <sandmann@daimi.au.dk>
|
Tue Sep 30 15:31:16 2003 Soeren Sandmann <sandmann@daimi.au.dk>
|
||||||
|
|
||||||
* glib/guniprop.c (has_more_above): make the argument const to
|
* glib/guniprop.c (has_more_above): make the argument const to
|
||||||
|
@ -644,14 +644,17 @@ do_spawn (gboolean dont_wait,
|
|||||||
GSpawnChildSetupFunc child_setup,
|
GSpawnChildSetupFunc child_setup,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
|
gchar **protected_argv;
|
||||||
gchar **new_argv;
|
gchar **new_argv;
|
||||||
gchar args[ARG_COUNT][10];
|
gchar args[ARG_COUNT][10];
|
||||||
gint i;
|
gint i;
|
||||||
int rc;
|
int rc;
|
||||||
int argc = 0;
|
int argc;
|
||||||
|
|
||||||
SETUP_DEBUG();
|
SETUP_DEBUG();
|
||||||
|
|
||||||
|
argc = protect_argv (argv, &protected_argv);
|
||||||
|
|
||||||
if (stdin_fd == -1 && stdout_fd == -1 && stderr_fd == -1 &&
|
if (stdin_fd == -1 && stdout_fd == -1 && stderr_fd == -1 &&
|
||||||
(working_directory == NULL || !*working_directory) &&
|
(working_directory == NULL || !*working_directory) &&
|
||||||
!close_descriptors &&
|
!close_descriptors &&
|
||||||
@ -665,9 +668,13 @@ do_spawn (gboolean dont_wait,
|
|||||||
g_print ("doing without gspawn-win32-helper\n");
|
g_print ("doing without gspawn-win32-helper\n");
|
||||||
|
|
||||||
if (search_path)
|
if (search_path)
|
||||||
rc = spawnvp (mode, argv[0], argv);
|
rc = spawnvp (mode, argv[0], protected_argv);
|
||||||
else
|
else
|
||||||
rc = spawnv (mode, argv[0], argv);
|
rc = spawnv (mode, argv[0], protected_argv);
|
||||||
|
|
||||||
|
for (i = 0; i < argc; i++)
|
||||||
|
g_free (protected_argv[i]);
|
||||||
|
g_free (protected_argv);
|
||||||
|
|
||||||
if (rc == -1)
|
if (rc == -1)
|
||||||
{
|
{
|
||||||
@ -680,9 +687,6 @@ do_spawn (gboolean dont_wait,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while (argv[argc])
|
|
||||||
++argc;
|
|
||||||
|
|
||||||
new_argv = g_new (gchar *, argc + 1 + ARG_COUNT);
|
new_argv = g_new (gchar *, argc + 1 + ARG_COUNT);
|
||||||
|
|
||||||
new_argv[0] = "gspawn-win32-helper";
|
new_argv[0] = "gspawn-win32-helper";
|
||||||
@ -755,7 +759,7 @@ do_spawn (gboolean dont_wait,
|
|||||||
new_argv[ARG_WAIT] = "w";
|
new_argv[ARG_WAIT] = "w";
|
||||||
|
|
||||||
for (i = 0; i <= argc; i++)
|
for (i = 0; i <= argc; i++)
|
||||||
new_argv[ARG_PROGRAM + i] = argv[i];
|
new_argv[ARG_PROGRAM + i] = protected_argv[i];
|
||||||
|
|
||||||
/* Call user function just before we execute the helper program,
|
/* Call user function just before we execute the helper program,
|
||||||
* which executes the program. Dunno what's the usefulness of this.
|
* which executes the program. Dunno what's the usefulness of this.
|
||||||
@ -794,6 +798,10 @@ do_spawn (gboolean dont_wait,
|
|||||||
if (stderr_fd >= 0)
|
if (stderr_fd >= 0)
|
||||||
close (stderr_fd);
|
close (stderr_fd);
|
||||||
|
|
||||||
|
for (i = 0; i < argc; i++)
|
||||||
|
g_free (protected_argv[i]);
|
||||||
|
g_free (protected_argv);
|
||||||
|
|
||||||
g_free (new_argv[ARG_WORKING_DIRECTORY]);
|
g_free (new_argv[ARG_WORKING_DIRECTORY]);
|
||||||
g_free (new_argv);
|
g_free (new_argv);
|
||||||
|
|
||||||
@ -875,9 +883,6 @@ do_spawn_with_pipes (gboolean dont_wait,
|
|||||||
gint helper = -1;
|
gint helper = -1;
|
||||||
gint buf[2];
|
gint buf[2];
|
||||||
gint n_ints = 0;
|
gint n_ints = 0;
|
||||||
gint i;
|
|
||||||
gint argc;
|
|
||||||
gchar **new_argv;
|
|
||||||
|
|
||||||
if (!make_pipe (child_err_report_pipe, error))
|
if (!make_pipe (child_err_report_pipe, error))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -891,15 +896,13 @@ do_spawn_with_pipes (gboolean dont_wait,
|
|||||||
if (standard_error && !make_pipe (stderr_pipe, error))
|
if (standard_error && !make_pipe (stderr_pipe, error))
|
||||||
goto cleanup_and_fail;
|
goto cleanup_and_fail;
|
||||||
|
|
||||||
argc = protect_argv (argv, &new_argv);
|
|
||||||
|
|
||||||
helper = do_spawn (dont_wait,
|
helper = do_spawn (dont_wait,
|
||||||
child_err_report_pipe[1],
|
child_err_report_pipe[1],
|
||||||
stdin_pipe[0],
|
stdin_pipe[0],
|
||||||
stdout_pipe[1],
|
stdout_pipe[1],
|
||||||
stderr_pipe[1],
|
stderr_pipe[1],
|
||||||
working_directory,
|
working_directory,
|
||||||
new_argv,
|
argv,
|
||||||
envp,
|
envp,
|
||||||
close_descriptors,
|
close_descriptors,
|
||||||
search_path,
|
search_path,
|
||||||
@ -910,10 +913,6 @@ do_spawn_with_pipes (gboolean dont_wait,
|
|||||||
child_setup,
|
child_setup,
|
||||||
user_data);
|
user_data);
|
||||||
|
|
||||||
for (i = 0; i < argc; i++)
|
|
||||||
g_free (new_argv[i]);
|
|
||||||
g_free (new_argv);
|
|
||||||
|
|
||||||
/* Check if gspawn-win32-helper couldn't be run */
|
/* Check if gspawn-win32-helper couldn't be run */
|
||||||
if (helper == DO_SPAWN_ERROR_HELPER)
|
if (helper == DO_SPAWN_ERROR_HELPER)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user