mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-04-17 12:58:48 +02:00
Create also a console version of the gspawn-win32-helper program,
2005-09-07 Tor Lillqvist <tml@novell.com> * glib/Makefile.am: Create also a console version of the gspawn-win32-helper program, gspawn-win32-helper-console.exe. It's otherwise identical to gspawn-win32-helper.exe, except marked as a console application (linked without the -mwindows option). * glib/gspawn-win32.c (do_spawn_directly, do_spawn_with_pipes): Drop the dont_wait parameter. Its truth value correlated 100% with the NULLness of the exit_status parameter anyway, so it's enough to check whether exit_status is NULL. Invert the sense of the dont_return_handle parameter and rename it to do_return_handle, to make the code easier to read by avoiding double negations. (g_spawn_sync_utf8, g_spawn_async_with_pipes_utf8): Modify calls to do_spawn_with_pipes() accordingly. (do_spawn_with_pipes): If we have a console, use the console version of the helper program, otherwise use the GUI one. This avoids extra console windows opening up in some situations. (In case a console application uses the GUI gspawn-win32-helper.exe to spawn another console application we would get a separate console for the spawned console application). * glib-zip.in: Distribute also gspawn-win32-helper-console.exe.
This commit is contained in:
parent
81eb80112f
commit
17045b64d3
26
ChangeLog
26
ChangeLog
@ -1,3 +1,29 @@
|
|||||||
|
2005-09-07 Tor Lillqvist <tml@novell.com>
|
||||||
|
|
||||||
|
* glib/Makefile.am: Create also a console version of the
|
||||||
|
gspawn-win32-helper program, gspawn-win32-helper-console.exe.
|
||||||
|
It's otherwise identical to gspawn-win32-helper.exe, except marked
|
||||||
|
as a console application (linked without the -mwindows option).
|
||||||
|
|
||||||
|
* glib/gspawn-win32.c (do_spawn_directly, do_spawn_with_pipes):
|
||||||
|
Drop the dont_wait parameter. Its truth value correlated 100% with
|
||||||
|
the NULLness of the exit_status parameter anyway, so it's enough
|
||||||
|
to check whether exit_status is NULL. Invert the sense of the
|
||||||
|
dont_return_handle parameter and rename it to do_return_handle, to
|
||||||
|
make the code easier to read by avoiding double negations.
|
||||||
|
|
||||||
|
(g_spawn_sync_utf8, g_spawn_async_with_pipes_utf8): Modify calls
|
||||||
|
to do_spawn_with_pipes() accordingly.
|
||||||
|
|
||||||
|
(do_spawn_with_pipes): If we have a console, use the console
|
||||||
|
version of the helper program, otherwise use the GUI one. This
|
||||||
|
avoids extra console windows opening up in some situations. (In
|
||||||
|
case a console application uses the GUI gspawn-win32-helper.exe to
|
||||||
|
spawn another console application we would get a separate console
|
||||||
|
for the spawned console application).
|
||||||
|
|
||||||
|
* glib-zip.in: Distribute also gspawn-win32-helper-console.exe.
|
||||||
|
|
||||||
2005-09-05 Matthias Clasen <mclasen@redhat.com>
|
2005-09-05 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
* glib/gmappedfile.c (g_mapped_file_new): Report an error
|
* glib/gmappedfile.c (g_mapped_file_new): Report an error
|
||||||
|
@ -1,3 +1,29 @@
|
|||||||
|
2005-09-07 Tor Lillqvist <tml@novell.com>
|
||||||
|
|
||||||
|
* glib/Makefile.am: Create also a console version of the
|
||||||
|
gspawn-win32-helper program, gspawn-win32-helper-console.exe.
|
||||||
|
It's otherwise identical to gspawn-win32-helper.exe, except marked
|
||||||
|
as a console application (linked without the -mwindows option).
|
||||||
|
|
||||||
|
* glib/gspawn-win32.c (do_spawn_directly, do_spawn_with_pipes):
|
||||||
|
Drop the dont_wait parameter. Its truth value correlated 100% with
|
||||||
|
the NULLness of the exit_status parameter anyway, so it's enough
|
||||||
|
to check whether exit_status is NULL. Invert the sense of the
|
||||||
|
dont_return_handle parameter and rename it to do_return_handle, to
|
||||||
|
make the code easier to read by avoiding double negations.
|
||||||
|
|
||||||
|
(g_spawn_sync_utf8, g_spawn_async_with_pipes_utf8): Modify calls
|
||||||
|
to do_spawn_with_pipes() accordingly.
|
||||||
|
|
||||||
|
(do_spawn_with_pipes): If we have a console, use the console
|
||||||
|
version of the helper program, otherwise use the GUI one. This
|
||||||
|
avoids extra console windows opening up in some situations. (In
|
||||||
|
case a console application uses the GUI gspawn-win32-helper.exe to
|
||||||
|
spawn another console application we would get a separate console
|
||||||
|
for the spawned console application).
|
||||||
|
|
||||||
|
* glib-zip.in: Distribute also gspawn-win32-helper-console.exe.
|
||||||
|
|
||||||
2005-09-05 Matthias Clasen <mclasen@redhat.com>
|
2005-09-05 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
* glib/gmappedfile.c (g_mapped_file_new): Report an error
|
* glib/gmappedfile.c (g_mapped_file_new): Report an error
|
||||||
|
@ -1,3 +1,29 @@
|
|||||||
|
2005-09-07 Tor Lillqvist <tml@novell.com>
|
||||||
|
|
||||||
|
* glib/Makefile.am: Create also a console version of the
|
||||||
|
gspawn-win32-helper program, gspawn-win32-helper-console.exe.
|
||||||
|
It's otherwise identical to gspawn-win32-helper.exe, except marked
|
||||||
|
as a console application (linked without the -mwindows option).
|
||||||
|
|
||||||
|
* glib/gspawn-win32.c (do_spawn_directly, do_spawn_with_pipes):
|
||||||
|
Drop the dont_wait parameter. Its truth value correlated 100% with
|
||||||
|
the NULLness of the exit_status parameter anyway, so it's enough
|
||||||
|
to check whether exit_status is NULL. Invert the sense of the
|
||||||
|
dont_return_handle parameter and rename it to do_return_handle, to
|
||||||
|
make the code easier to read by avoiding double negations.
|
||||||
|
|
||||||
|
(g_spawn_sync_utf8, g_spawn_async_with_pipes_utf8): Modify calls
|
||||||
|
to do_spawn_with_pipes() accordingly.
|
||||||
|
|
||||||
|
(do_spawn_with_pipes): If we have a console, use the console
|
||||||
|
version of the helper program, otherwise use the GUI one. This
|
||||||
|
avoids extra console windows opening up in some situations. (In
|
||||||
|
case a console application uses the GUI gspawn-win32-helper.exe to
|
||||||
|
spawn another console application we would get a separate console
|
||||||
|
for the spawned console application).
|
||||||
|
|
||||||
|
* glib-zip.in: Distribute also gspawn-win32-helper-console.exe.
|
||||||
|
|
||||||
2005-09-05 Matthias Clasen <mclasen@redhat.com>
|
2005-09-05 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
* glib/gmappedfile.c (g_mapped_file_new): Report an error
|
* glib/gmappedfile.c (g_mapped_file_new): Report an error
|
||||||
|
@ -15,6 +15,7 @@ DLLDIR=lib
|
|||||||
zip $ZIP -@ <<EOF
|
zip $ZIP -@ <<EOF
|
||||||
COPYING.LIB-2
|
COPYING.LIB-2
|
||||||
bin/gspawn-win32-helper.exe
|
bin/gspawn-win32-helper.exe
|
||||||
|
bin/gspawn-win32-helper-console.exe
|
||||||
$DLLDIR/libglib-2.0-@LT_CURRENT_MINUS_AGE@.dll
|
$DLLDIR/libglib-2.0-@LT_CURRENT_MINUS_AGE@.dll
|
||||||
$DLLDIR/libgmodule-2.0-@LT_CURRENT_MINUS_AGE@.dll
|
$DLLDIR/libgmodule-2.0-@LT_CURRENT_MINUS_AGE@.dll
|
||||||
$DLLDIR/libgobject-2.0-@LT_CURRENT_MINUS_AGE@.dll
|
$DLLDIR/libgobject-2.0-@LT_CURRENT_MINUS_AGE@.dll
|
||||||
|
@ -229,14 +229,18 @@ libglib_2_0_la_LDFLAGS = \
|
|||||||
-export-dynamic $(no_undefined) $(export_symbols)
|
-export-dynamic $(no_undefined) $(export_symbols)
|
||||||
|
|
||||||
if OS_WIN32
|
if OS_WIN32
|
||||||
bin_PROGRAMS = gspawn-win32-helper
|
bin_PROGRAMS = gspawn-win32-helper gspawn-win32-helper-console
|
||||||
gspawn_win32_helper_LDADD = libglib-2.0.la
|
gspawn_win32_helper_LDADD = libglib-2.0.la
|
||||||
gspawn_win32_helper_LDFLAGS = -mwindows
|
gspawn_win32_helper_LDFLAGS = -mwindows
|
||||||
|
gspawn_win32_helper_console_LDADD = libglib-2.0.la
|
||||||
|
|
||||||
glib-win32-res.o: glib.rc
|
glib-win32-res.o: glib.rc
|
||||||
$(WINDRES) glib.rc $@
|
$(WINDRES) glib.rc $@
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
gspawn-win32-helper-console.c:
|
||||||
|
echo '#include "gspawn-win32-helper.c"' >$@
|
||||||
|
|
||||||
glib-2.0.lib: libglib-2.0.la glib.def
|
glib-2.0.lib: libglib-2.0.la glib.def
|
||||||
lib -name:libglib-2.0-$(LT_CURRENT_MINUS_AGE).dll -def:glib.def -out:$@
|
lib -name:libglib-2.0-$(LT_CURRENT_MINUS_AGE).dll -def:glib.def -out:$@
|
||||||
|
|
||||||
|
@ -441,8 +441,8 @@ utf8_charv_to_cp_charv (char **utf8_charv,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
do_spawn_directly (gboolean dont_wait,
|
do_spawn_directly (gint *exit_status,
|
||||||
gboolean dont_return_handle,
|
gboolean do_return_handle,
|
||||||
GSpawnFlags flags,
|
GSpawnFlags flags,
|
||||||
gchar **argv,
|
gchar **argv,
|
||||||
char **envp,
|
char **envp,
|
||||||
@ -450,10 +450,9 @@ do_spawn_directly (gboolean dont_wait,
|
|||||||
GSpawnChildSetupFunc child_setup,
|
GSpawnChildSetupFunc child_setup,
|
||||||
gpointer user_data,
|
gpointer user_data,
|
||||||
GPid *child_handle,
|
GPid *child_handle,
|
||||||
gint *exit_status,
|
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
int mode = dont_wait ? P_NOWAIT : P_WAIT;
|
const int mode = (exit_status == NULL) ? P_NOWAIT : P_WAIT;
|
||||||
char **new_argv;
|
char **new_argv;
|
||||||
int rc = -1;
|
int rc = -1;
|
||||||
int saved_errno;
|
int saved_errno;
|
||||||
@ -584,9 +583,9 @@ do_spawn_directly (gboolean dont_wait,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dont_wait)
|
if (exit_status == NULL)
|
||||||
{
|
{
|
||||||
if (child_handle && !dont_return_handle)
|
if (child_handle && do_return_handle)
|
||||||
*child_handle = (GPid) rc;
|
*child_handle = (GPid) rc;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -595,15 +594,15 @@ do_spawn_directly (gboolean dont_wait,
|
|||||||
*child_handle = 0;
|
*child_handle = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (exit_status)
|
else
|
||||||
*exit_status = rc;
|
*exit_status = rc;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
do_spawn_with_pipes (gboolean dont_wait,
|
do_spawn_with_pipes (gint *exit_status,
|
||||||
gboolean dont_return_handle,
|
gboolean do_return_handle,
|
||||||
const gchar *working_directory,
|
const gchar *working_directory,
|
||||||
gchar **argv,
|
gchar **argv,
|
||||||
char **envp,
|
char **envp,
|
||||||
@ -614,7 +613,6 @@ do_spawn_with_pipes (gboolean dont_wait,
|
|||||||
gint *standard_input,
|
gint *standard_input,
|
||||||
gint *standard_output,
|
gint *standard_output,
|
||||||
gint *standard_error,
|
gint *standard_error,
|
||||||
gint *exit_status,
|
|
||||||
gint *err_report,
|
gint *err_report,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
@ -633,6 +631,8 @@ do_spawn_with_pipes (gboolean dont_wait,
|
|||||||
static gboolean warned_about_child_setup = FALSE;
|
static gboolean warned_about_child_setup = FALSE;
|
||||||
GError *conv_error = NULL;
|
GError *conv_error = NULL;
|
||||||
gint conv_error_index;
|
gint conv_error_index;
|
||||||
|
gchar *helper_process;
|
||||||
|
CONSOLE_CURSOR_INFO cursor_info;
|
||||||
|
|
||||||
SETUP_DEBUG();
|
SETUP_DEBUG();
|
||||||
|
|
||||||
@ -653,10 +653,10 @@ do_spawn_with_pipes (gboolean dont_wait,
|
|||||||
{
|
{
|
||||||
/* We can do without the helper process */
|
/* We can do without the helper process */
|
||||||
gboolean retval =
|
gboolean retval =
|
||||||
do_spawn_directly (dont_wait, dont_return_handle, flags,
|
do_spawn_directly (exit_status, do_return_handle, flags,
|
||||||
argv, envp, protected_argv,
|
argv, envp, protected_argv,
|
||||||
child_setup, user_data, child_handle,
|
child_setup, user_data, child_handle,
|
||||||
exit_status, error);
|
error);
|
||||||
g_strfreev (protected_argv);
|
g_strfreev (protected_argv);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
@ -674,7 +674,11 @@ do_spawn_with_pipes (gboolean dont_wait,
|
|||||||
goto cleanup_and_fail;
|
goto cleanup_and_fail;
|
||||||
|
|
||||||
new_argv = g_new (char *, argc + 1 + ARG_COUNT);
|
new_argv = g_new (char *, argc + 1 + ARG_COUNT);
|
||||||
new_argv[0] = HELPER_PROCESS;
|
if (GetConsoleCursorInfo (GetStdHandle (STD_OUTPUT_HANDLE), &cursor_info))
|
||||||
|
helper_process = HELPER_PROCESS "-console.exe";
|
||||||
|
else
|
||||||
|
helper_process = HELPER_PROCESS ".exe";
|
||||||
|
new_argv[0] = helper_process;
|
||||||
_g_sprintf (args[ARG_CHILD_ERR_REPORT], "%d", child_err_report_pipe[1]);
|
_g_sprintf (args[ARG_CHILD_ERR_REPORT], "%d", child_err_report_pipe[1]);
|
||||||
new_argv[ARG_CHILD_ERR_REPORT] = args[ARG_CHILD_ERR_REPORT];
|
new_argv[ARG_CHILD_ERR_REPORT] = args[ARG_CHILD_ERR_REPORT];
|
||||||
|
|
||||||
@ -745,7 +749,7 @@ do_spawn_with_pipes (gboolean dont_wait,
|
|||||||
else
|
else
|
||||||
new_argv[ARG_USE_PATH] = "-";
|
new_argv[ARG_USE_PATH] = "-";
|
||||||
|
|
||||||
if (dont_wait)
|
if (exit_status == NULL)
|
||||||
new_argv[ARG_WAIT] = "-";
|
new_argv[ARG_WAIT] = "-";
|
||||||
else
|
else
|
||||||
new_argv[ARG_WAIT] = "w";
|
new_argv[ARG_WAIT] = "w";
|
||||||
@ -755,14 +759,14 @@ do_spawn_with_pipes (gboolean dont_wait,
|
|||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
g_print ("calling " HELPER_PROCESS " with argv:\n");
|
g_print ("calling %s with argv:\n", helper_process);
|
||||||
for (i = 0; i < argc + 1 + ARG_COUNT; i++)
|
for (i = 0; i < argc + 1 + ARG_COUNT; i++)
|
||||||
g_print ("argv[%d]: %s\n", i, (new_argv[i] ? new_argv[i] : "NULL"));
|
g_print ("argv[%d]: %s\n", i, (new_argv[i] ? new_argv[i] : "NULL"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (G_WIN32_HAVE_WIDECHAR_API ())
|
if (G_WIN32_HAVE_WIDECHAR_API ())
|
||||||
{
|
{
|
||||||
wchar_t *whelper = g_utf8_to_utf16 (HELPER_PROCESS, -1, NULL, NULL, NULL);
|
wchar_t *whelper = g_utf8_to_utf16 (helper_process, -1, NULL, NULL, NULL);
|
||||||
wchar_t **wargv, **wenvp;
|
wchar_t **wargv, **wenvp;
|
||||||
|
|
||||||
if (!utf8_charv_to_wcharv (new_argv, &wargv, &conv_error_index, &conv_error))
|
if (!utf8_charv_to_wcharv (new_argv, &wargv, &conv_error_index, &conv_error))
|
||||||
@ -856,9 +860,9 @@ do_spawn_with_pipes (gboolean dont_wait,
|
|||||||
(* child_setup) (user_data);
|
(* child_setup) (user_data);
|
||||||
|
|
||||||
if (cpenvp != NULL)
|
if (cpenvp != NULL)
|
||||||
rc = spawnvpe (P_NOWAIT, HELPER_PROCESS, (const char **) cpargv, (const char **) cpenvp);
|
rc = spawnvpe (P_NOWAIT, helper_process, (const char **) cpargv, (const char **) cpenvp);
|
||||||
else
|
else
|
||||||
rc = spawnvp (P_NOWAIT, HELPER_PROCESS, (const char **) cpargv);
|
rc = spawnvp (P_NOWAIT, helper_process, (const char **) cpargv);
|
||||||
|
|
||||||
saved_errno = errno;
|
saved_errno = errno;
|
||||||
|
|
||||||
@ -888,7 +892,7 @@ do_spawn_with_pipes (gboolean dont_wait,
|
|||||||
goto cleanup_and_fail;
|
goto cleanup_and_fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!dont_wait)
|
if (exit_status != NULL)
|
||||||
{
|
{
|
||||||
/* Synchronous case. Pass helper's report pipe back to caller,
|
/* Synchronous case. Pass helper's report pipe back to caller,
|
||||||
* which takes care of reading it after the grandchild has
|
* which takes care of reading it after the grandchild has
|
||||||
@ -908,7 +912,7 @@ do_spawn_with_pipes (gboolean dont_wait,
|
|||||||
switch (helper_report[0])
|
switch (helper_report[0])
|
||||||
{
|
{
|
||||||
case CHILD_NO_ERROR:
|
case CHILD_NO_ERROR:
|
||||||
if (child_handle && dont_wait && !dont_return_handle)
|
if (child_handle && do_return_handle)
|
||||||
{
|
{
|
||||||
/* rc is our HANDLE for gspawn-win32-helper. It has
|
/* rc is our HANDLE for gspawn-win32-helper. It has
|
||||||
* told us the HANDLE of its child. Duplicate that into
|
* told us the HANDLE of its child. Duplicate that into
|
||||||
@ -921,8 +925,6 @@ do_spawn_with_pipes (gboolean dont_wait,
|
|||||||
}
|
}
|
||||||
else if (child_handle)
|
else if (child_handle)
|
||||||
*child_handle = 0;
|
*child_handle = 0;
|
||||||
if (exit_status)
|
|
||||||
*exit_status = helper_report[1];
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -1011,8 +1013,8 @@ g_spawn_sync_utf8 (const gchar *working_directory,
|
|||||||
if (standard_error)
|
if (standard_error)
|
||||||
*standard_error = NULL;
|
*standard_error = NULL;
|
||||||
|
|
||||||
if (!do_spawn_with_pipes (FALSE,
|
if (!do_spawn_with_pipes (&status,
|
||||||
TRUE,
|
FALSE,
|
||||||
working_directory,
|
working_directory,
|
||||||
argv,
|
argv,
|
||||||
envp,
|
envp,
|
||||||
@ -1023,7 +1025,6 @@ g_spawn_sync_utf8 (const gchar *working_directory,
|
|||||||
NULL,
|
NULL,
|
||||||
standard_output ? &outpipe : NULL,
|
standard_output ? &outpipe : NULL,
|
||||||
standard_error ? &errpipe : NULL,
|
standard_error ? &errpipe : NULL,
|
||||||
&status,
|
|
||||||
&reportpipe,
|
&reportpipe,
|
||||||
error))
|
error))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -1227,8 +1228,8 @@ g_spawn_async_with_pipes_utf8 (const gchar *working_directory,
|
|||||||
g_return_val_if_fail (standard_input == NULL ||
|
g_return_val_if_fail (standard_input == NULL ||
|
||||||
!(flags & G_SPAWN_CHILD_INHERITS_STDIN), FALSE);
|
!(flags & G_SPAWN_CHILD_INHERITS_STDIN), FALSE);
|
||||||
|
|
||||||
return do_spawn_with_pipes (TRUE,
|
return do_spawn_with_pipes (NULL,
|
||||||
!(flags & G_SPAWN_DO_NOT_REAP_CHILD),
|
(flags & G_SPAWN_DO_NOT_REAP_CHILD),
|
||||||
working_directory,
|
working_directory,
|
||||||
argv,
|
argv,
|
||||||
envp,
|
envp,
|
||||||
@ -1240,7 +1241,6 @@ g_spawn_async_with_pipes_utf8 (const gchar *working_directory,
|
|||||||
standard_output,
|
standard_output,
|
||||||
standard_error,
|
standard_error,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
|
||||||
error);
|
error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user