123 Commits

Author SHA1 Message Date
Colin Walters
f7abd3ce13 Add g_spawn_check_exit_status()
Many (if not "almost all") programs that spawn other programs via
g_spawn_sync() or the like simply want to check whether or not the
child exited successfully, but doing so requires use of
platform-specific functionality and there's actually a fair amount of
boilerplate involved.

This new API will help drain a *lot* of mostly duplicated code in
GNOME, from gnome-session to gdm.  And we can see that some bits even
inside GLib were doing it wrong; for example checking the exit status
on Unix, but ignoring it on Windows.

https://bugzilla.gnome.org/show_bug.cgi?id=679691
2012-07-10 18:03:56 -04:00
Colin Walters
01d8d43d0b gspawn: Abort if we can't open /dev/null
This really "shouldn't happen", but if we have an assertion here, it
will help static analysis tools know we're not hitting undefined
state.
2012-06-22 10:34:03 -04:00
Christian Persch
481191f118 gspawn: Add GSpawnFlag to use the PATH from envp
Add a G_SPAWN_SEARCH_PATH_FROM_ENVP flag to GSpawnFlags so that
g_spawn_async() etc use the PATH variable from the passed-in child
environment to search for the executable.
If both this flag and the G_SPAWN_SEARCH_PATH flag are set, the
child environment is searched first and only falls back to the
PATH from the process environment if it is unset.

Bug #676398.
2012-05-22 19:47:28 +02:00
David Benjamin
b0739f2223 Continue searching in PATH on ENODEV and ETIMEDOUT
Synchronize the error-handling logic from glibc. Users with networked
filesystems in their PATH may hit ETIMEDOUT.

https://bugzilla.gnome.org/show_bug.cgi?id=672201
2012-03-16 11:49:30 -04:00
Dan Winship
deea0e39ba gspawn: rename G_SPAWN_ERROR_2BIG to be more bindings-friendly
Rename G_SPAWN_ERROR_2BIG to G_SPAWN_ERROR_TOO_BIG (while keeping the
old name for compatibility), to fix problems with language bindings
where the old name translates into something that would be
syntactically invalid due to starting with a digit.

https://bugzilla.gnome.org/show_bug.cgi?id=671025
2012-03-03 13:26:43 -05:00
Stef Walter
7e92997539 documentation fixes
Fixes for gtk-doc warnings.

http://bugzilla.gnome.org/show_bug.cgi?id=66469

https://bugzilla.gnome.org/show_bug.cgi?id=664699
2011-12-13 23:01:51 -05:00
Martin Pitt
1435db48ba Clarify g_spawn_*() behaviour without full path
Document the previously uncovered case of calling g_spawn_async_with_pipes()
without a full path but no G_SPAWN_SEARCH_PATH. This runs programs from the
current directory, which might be unexpected and even dangerous in some corner
cases.

https://bugzilla.gnome.org/show_bug.cgi?id=656621
2011-10-16 16:09:33 -04:00
Matthias Clasen
976b0b72a4 Include genviron.h where necessary 2011-10-15 20:06:32 -04:00
Ryan Lortie
118fa5d502 doc: Remove reference to non-existent #GChildWatch
The g_spawn_ documentation was talking about #GChildWatch, which doesn't
exist.  Refer to g_child_watch_add() instead.
2011-09-05 10:32:51 -04:00
Javier Jardón
c2dc66ccf2 Move documentation to inline comments: spawn 2011-07-06 22:13:05 +01:00
Matthias Clasen
a6b9db6907 Eliminate some dead code 2011-06-14 21:06:17 -04:00
Colin Walters
1874ad97d8 gspawn: Reset signal handlers for synchronous spawning
We should by default reset signal handlers; particularly with the
ability to install them via g_unix_signal_source_new(), we don't
want to call a user callback inside a fork()ed helper process.

https://bugzilla.gnome.org/show_bug.cgi?id=652072
2011-06-14 19:23:36 -04:00
Colin Walters
7e1886ba72 gspawn: Handle EINTR in a few more cases
I was debugging gthread/tests/spawn-multithreaded.c, and while I
don't think I actually hit EINTR in any of these cases, it'd be
good to fix them anyways.

https://bugzilla.gnome.org/show_bug.cgi?id=652072
2011-06-14 19:23:35 -04:00
Colin Walters
9d53e2bc4e gspawn: Fix annotations
g-ir-scanner wants guint8.
2011-06-10 12:58:49 -04:00
Giovanni Campagna
37c9775b82 gutils, gspawn: fix introspection annotations
Fix various (out) arguments, (allow-none) and (array zero-terminated=1)
for g_spawn_*() and some others.

Some additional fixes by Colin Walters <walters@verbum.org>

https://bugzilla.gnome.org/show_bug.cgi?id=646635
2011-06-07 17:13:15 -04:00
Emmanuele Bassi
959886d95e build: Fix warnings caused by missing includes 2010-09-06 11:43:04 +01:00
Matthias Clasen
f13d561211 More header inclusion cleanup 2010-09-05 00:23:03 -04:00
Ryan Lortie
2e53e50244 glib/: fully remove galias hacks 2010-07-07 19:34:35 -04:00
Christian Persch
8ef30758d5 Preserve errno
When using errno in g_set_error with _(), preserve errno. Bug #592457.
2009-08-22 15:08:43 +02:00
Christian Persch
1cbdd2495d Preserve errno when using g_set_error with _() and g_strerror() 2009-05-20 13:47:55 +02:00
Matthias Clasen
0f6b25ca96 Fix some compiler warnings
svn path=/trunk/; revision=7755
2008-12-31 05:51:47 +00:00
Tor Lillqvist
0ed8b94bfe Just ignore the child_setup function, never call it. The is no situation
2008-09-25  Tor Lillqvist  <tml@novell.com>

	* glib/gspawn-win32.c (do_spawn_with_pipes) (do_spawn_directly):
	Just ignore the child_setup function, never call it. The is no
	situation in which it could be useful on Windows. Do print a
	warning, like before.

	* glib/gspawn.c (g_spawn_async_with_pipes): Corresponding change
	in documentation.


svn path=/trunk/; revision=7540
2008-09-25 08:05:41 +00:00
Tor Lillqvist
a689811a41 glib/gmain.c Clarify what a "child pid" is in the doc comments.
2008-06-11  Tor Lillqvist  <tml@novell.com>

	* glib/gmain.c
	* glib/gspawn.c: Clarify what a "child pid" is in the doc
	comments.


svn path=/trunk/; revision=6995
2008-06-11 06:57:22 +00:00
Matthias Clasen
528094002f Fix a typo in the docs
svn path=/trunk/; revision=6930
2008-05-25 19:57:56 +00:00
Matthias Clasen
6554c8509f Fix fdwalk on OS X
svn path=/trunk/; revision=6253
2008-01-06 23:12:24 +00:00
Matthias Clasen
d451314384 Improve the docs. (#491968, Areg Beketovski)
2007-11-09  Matthias Clasen <mclasen@redhat.com>

        * glib/gspawn.c (g_spawn_sync): Improve the docs.  (#491968,
        Areg Beketovski)


svn path=/trunk/; revision=5846
2007-11-09 16:45:42 +00:00
Matthias Clasen
126d98216a Improve docs
svn path=/trunk/; revision=5807
2007-11-07 16:44:21 +00:00
Matthias Clasen
a57cf3893c Check for sys/resource.h
2007-10-16  Matthias Clasen  <mclasen@redhat.com>

        * configure.in: Check for sys/resource.h

        * glib/gspawn.c: Improve the fdwalk implementation on Linux
        to only walk over actually open file descriptors. (#469231,
        Lennart Poettering)


svn path=/trunk/; revision=5783
2007-10-16 05:28:10 +00:00
Matthias Clasen
613d81bcce Fix a doc typo. (#427285, Jochen Baier)
2007-04-11  Matthias Clasen  <mclasen@redhat.com>

        * glib/gspawn.c (g_spawn_async): Fix a doc typo.  (#427285,
        Jochen Baier)



svn path=/trunk/; revision=5446
2007-04-11 13:54:45 +00:00
Matthias Clasen
98d552e0cd Consistently use gsize rather than size_t. (#333310, Morten Welinder)
2006-12-27  Matthias Clasen  <mclasen@redhat.com>

        * glib/gconvert.[hc]:
        * glib/gfileutils.c:
        * glib/giochannel.c:
        * glib/goption.c:
        * glib/gspawn.c:
        * glib/gunicollate.c:
        * glib/gutils.c:
        * tests/timeloop-basic.c:
        Consistently use gsize rather than size_t.  (#333310,
        Morten Welinder)
2006-12-28 04:48:06 +00:00
Matthias Clasen
7d0a0206d8 Improve docs 2006-12-17 20:22:20 +00:00
Matthias Clasen
ff290367a5 Add some pointers to the gdk_spawn_ variants. (#338134, Federico Mena
2006-12-17  Matthias Clasen  <mclasen@redhat.com>

        * glib/gspawn.c: Add some pointers to the gdk_spawn_
        variants.  (#338134, Federico Mena Quintero)
2006-12-17 18:49:57 +00:00
Matthias Clasen
a7d0392b4d Fix the recent fdwalk()-related changes to not break mapping-test.
* glib/gspawn.c: Fix the recent fdwalk()-related changes
        to not break mapping-test.  (#286838, Marco Barisione)
2006-12-17 17:45:03 +00:00
Matthias Clasen
86346d02c7 add a comment 2006-12-16 03:36:14 +00:00
Matthias Clasen
814f0bec5c Undefine READ_OK to fix the build on old versions of Darwin. (#327800)
2006-12-15  Matthias Clasen  <mclasen@redhat.com>

	* glib/gspawn.c: Undefine READ_OK to fix the build on
	old versions of Darwin.  (#327800)
2006-12-16 03:33:23 +00:00
Matthias Clasen
0047db2bf0 Call set_cloexec() with the right parameters. (#386252, Guillaume
2006-12-15  Matthias Clasen  <mclasen@redhat.com>

        * glib/gspawn.c (do_exec): Call set_cloexec() with
        the right parameters.  (#386252, Guillaume Desmottes)
2006-12-15 18:27:51 +00:00
Matthias Clasen
af475972c6 Fix #357585, Padraig O'Briain.
2006-12-15  Matthias Clasen  <mclasen@redhat.com>

	Fix #357585, Padraig O'Briain.

	* configure.in: Check for fdwalk.

	* glib/gspawn.c (do_exec): Use fdwalk() to close all
	file descriptors.

	* glib/gspawn.c (fdwalk): Fallback implementation of
	fdwalk.
2006-12-15 05:33:32 +00:00
Matthias Clasen
48876d7fb5 Fix PLT issues 2006-09-30 14:06:45 +00:00
Matthias Clasen
b58fb2bdb5 Move short_month_names and long_month_names to bss.
2006-04-04  Matthias Clasen  <mclasen@redhat.com>

        * glib/gdate.c: Move short_month_names and long_month_names
        to bss.

        * glib/gspawn-win32.c (g_spawn_error_quark):
        * glib/gspawn.c (g_spawn_error_quark):
        * glib/gshell.c (g_shell_error_quark):
        * glib/gmarkup.c (g_markup_error_quark):
        * glib/goption.c (g_option_error_quark):
        * glib/gkeyfile.c (g_key_file_error_quark):
        * glib/giochannel.c (g_io_channel_error_quark):
        * glib/gfileutils.c (g_file_error_quark):
        * glib/gconvert.c (g_convert_error_quark):
        * glib/gbookmarkfile.c (g_bookmark_file_error_quark):
        * glib/gthread.c (g_thread_error_quark): No point in making
        the error path fast by caching quarks.

        * glib/gbookmarkfile.c: Make the parser struct const.
2006-04-04 04:37:39 +00:00
Matthias Clasen
f42f6da6d5 Remove support for Solaris threads. (#136971, Sebastian Wilhelmi, patch by
2005-12-02  Matthias Clasen  <mclasen@redhat.com>

	* glib/gspawn.c:
	* configure.in: Remove support for Solaris threads.
	(#136971, Sebastian Wilhelmi, patch by Andrew Paprocki)
2005-12-02 21:37:25 +00:00
Tor Lillqvist
41e833ae4c Make also the g_spawn*() functions take parameters in the GLib file name
2005-08-25  Tor Lillqvist  <tml@novell.com>

	Make also the g_spawn*() functions take parameters in the GLib
	file name encoding, i.e. UTF-8, on Windows. Has no impact on Unix
	API or ABI. Like the other GLib API that was earlier changed to
	use UTF-8 on Windows, the names of the functions that take UTF-8
	have _utf8 suffixes added by using preprocessor macros in the
	header file. The old names are kept for functions with the old
	behaviour, taking parameters in the system codepage, for DLL ABI
	stability.

	* glib/gspawn.h: On Win32 add the suffix _utf8 to the names of the
	g_spawn*() functions.

	* glib/gspawn-win32.c: Use wide-char API on NT-based
	Windows. Convert parameters from UTF-8 to wide chars (NT) or
	system codepage (Win9x) and call the C library _wspawn*() or
	spawn*() functions respectvely. Add DLL ABI stability versions
	that take parameters in the system codepage.

	* glib/gspawn-win32-helper.c: On NT-based Windows use the
	wide-char versions of argv and envp, and use wide-char API to
	change directory and spawn the program to run. Remove the verbose
	debugging output, it was too complex to modify for the wide-char
	features. (Just add temporary debugging printouts if needed, no
	need to have them permanently in the source.)

	* glib/gspawn.c: Corresponding documentation updates.

	* glib/glib.symbols: Corresponding changes: Mark the ABI stability
	symbols as PRIVATE, add the new _utf8-suffixed ones.
2005-08-25 23:28:24 +00:00
Federico Mena Quintero
19c6921798 Merged from glib-2-6:
2005-05-20  Federico Mena Quintero  <federico@ximian.com>

	Merged from glib-2-6:

	* glib/gspawn.c (g_spawn_command_line_sync): Clarify the meaning
	of exit_status(); it's not the return code from the child, but
	rather the waitpid() status.
2005-05-20 19:30:02 +00:00
Matthias Clasen
608a31b98e Make PLT-reduction work with gcc4, and don't include everything in
2005-03-13  Matthias Clasen  <mclasen@redhat.com>

	Make PLT-reduction work with gcc4, and don't include
	everything in galias.h:

	* glib/glib.symbols: Group symbols by header and source file.
	* glib/makegalias.pl: Protect definitions by the same
	preprocessor symbols used to guard the headers. Move
	the alias declarations to a separate file which is
	produced when calling makegalias.pl -def
	* glib/Makefile.am (galiasdef.c): Add a rule to generate this
	file.
	* glib/*.c: Include galias.h after the other GLib headers,
	include galiasdef.c at the bottom.
2005-03-14 04:26:57 +00:00
Matthias Clasen
88baae805d Update the @flags documentation with references to GChildWatch and
2004-11-27  Matthias Clasen  <mclasen@redhat.com>

	* glib/gspawn.c (g_spawn_async_with_pipes): Update the @flags
	documentation with references to GChildWatch and
	g_spawn_close_pid().  (#136255, noted by Owen Taylor)
2004-11-27 05:24:12 +00:00
Matthias Clasen
2e7514d052 Apply a patch to fix sparse warnings. (#154696, Kjartan Maraas)
2004-10-23  Matthias Clasen  <mclasen@redhat.com>

	* glib/gasyncqueue.c, glib/gatomic.c, glib/gdate.c,
	glib/giochannel.c, glib/gmain.c, glib/gspawn.c,
	glib/libcharset/localcharset.c: Apply a patch to fix
	sparse warnings. (#154696, Kjartan Maraas)
2004-10-24 01:37:42 +00:00
Matthias Clasen
dafdffd751 Implement the same PLT reduction technique used in GTK+:
Thu Sep 16 02:03:15 2004  Matthias Clasen  <maclas@gmx.de>

	Implement the same PLT reduction technique used in GTK+:
2004-09-16 06:05:53 +00:00
Owen Taylor
f0f807c51f Use fork1() not fork for G_THREADS_IMPL_SOLARIS. (#136971, Sebastian
Sun Mar 14 13:23:36 2004  Owen Taylor  <otaylor@redhat.com>

        * glib/gspawn.c: Use fork1() not fork for
        G_THREADS_IMPL_SOLARIS. (#136971, Sebastian Wilhelmi)
2004-03-14 18:26:47 +00:00
Owen Taylor
38cbfaeb7a Patch from J. Ali Harlow
Mon Mar  1 15:39:57 2004  Owen Taylor  <otaylor@redhat.com>

       Patch from J. Ali Harlow

        * configure.in: Use void * not HANDLE for GPid on win32.

        * glib/gspawn.[ch] glib/gspawn-win32.[ch] glib/glib.def:
        Add g_spawn_close_pid().

        * glib/gspawn.[ch]: Make g_spawn functions take
        GPid * instead if int * (GPid == int on unix, will
        produce compile warnings until fixed on Win32.)

        * tests/child-test.c: Make the test a little more
        inappropriately verbose.

        * glib/gmain.c: Add some documentation warnings about
        not closing @pid while the source is active.
2004-03-01 20:47:49 +00:00
Matthias Clasen
a412fb1654 Remove some explicit Docbook markup which is no longer necessary
since gtk-doc does the right thing.
2003-07-25 21:32:47 +00:00
Owen Taylor
5f5ab2384c Patch from Jeffrey Stedfast <fejj@ximian.com> (#104825)
Mon Jun  2 14:18:21 2003  Owen Taylor  <otaylor@redhat.com>

        Patch from Jeffrey Stedfast <fejj@ximian.com> (#104825)

        * glib/gspawn.c (read_data): Don't read() into '&buf', while this
        is technically okay - it is clearer as just 'buf'.
        (write_all): New helper function that handles write() interrupts.
        (write_err_and_exit): Use write_all() instead of write().
        (fork_exec_with_pipes): Same here.
2003-06-02 18:20:25 +00:00