From 25bdf84ce207fd13191b490b62bb58be05ce7b2d Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sun, 21 Dec 2008 15:35:55 +0200 Subject: [PATCH] decomp: use plain fork/exec if POSIX spawn is missing --- modules/stream_filter/decomp.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/modules/stream_filter/decomp.c b/modules/stream_filter/decomp.c index f083fc7f98..da86731ece 100644 --- a/modules/stream_filter/decomp.c +++ b/modules/stream_filter/decomp.c @@ -27,6 +27,9 @@ #include #include #include +#ifndef _POSIX_SPAWN +# define _POSIX_SPAWN (-1) +#endif #include #include #include @@ -268,6 +271,7 @@ static int Open (stream_t *stream, const char *path) cloexec (uncomp[0]); p_sys->read_fd = uncomp[0]; +#if (_POSIX_SPAWN >= 0) posix_spawn_file_actions_t actions; if (posix_spawn_file_actions_init (&actions) == 0) { @@ -291,6 +295,25 @@ static int Open (stream_t *stream, const char *path) } posix_spawn_file_actions_destroy (&actions); } +#else /* _POSIX_SPAWN */ + switch (p_sys->pid = fork ()) + { + case -1: + msg_Err (stream, "Cannot fork (%m)"); + break; + case 0: + dup2 (comp[0], 0); + close (comp[0]); + dup2 (uncomp[1], 1); + close (uncomp[1]); + execlp (path, path, (char *)NULL); + exit (1); /* if we get, execlp() failed! */ + default: + if (vlc_clone (&p_sys->thread, Thread, stream, + VLC_THREAD_PRIORITY_INPUT) == 0) + ret = VLC_SUCCESS; + } +#endif /* _POSIX_SPAWN < 0 */ close (uncomp[1]); if (ret != VLC_SUCCESS) close (uncomp[0]); -- 2.39.2