From: RĂ©mi Denis-Courmont Date: Sun, 21 Dec 2008 13:35:55 +0000 (+0200) Subject: decomp: use plain fork/exec if POSIX spawn is missing X-Git-Tag: 1.0.0-pre1~1709 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=25bdf84ce207fd13191b490b62bb58be05ce7b2d;p=vlc decomp: use plain fork/exec if POSIX spawn is missing --- 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]);