diff --git a/modules/misc/inhibit/xdg.c b/modules/misc/inhibit/xdg.c index 3f297c6..e16a21e 100644 --- a/modules/misc/inhibit/xdg.c +++ b/modules/misc/inhibit/xdg.c @@ -27,7 +27,11 @@ #include #include #include -#include +#if !defined(_POSIX_SPAWN) +# define _POSIX_SPAWN -1 +#else +# include +#endif #include static int Open (vlc_object_t *); @@ -47,7 +51,9 @@ struct vlc_inhibit_sys vlc_thread_t thread; vlc_cond_t update, inactive; vlc_mutex_t lock; +#if (_POSIX_SPAWN >= 0) posix_spawnattr_t attr; +#endif bool suspend, suspended; }; @@ -67,17 +73,19 @@ static int Open (vlc_object_t *obj) vlc_mutex_init (&p_sys->lock); vlc_cond_init (&p_sys->update); vlc_cond_init (&p_sys->inactive); - posix_spawnattr_init (&p_sys->attr); /* Reset signal handlers to default and clear mask in the child process */ { sigset_t set; sigemptyset (&set); - posix_spawnattr_setsigmask (&p_sys->attr, &set); sigaddset (&set, SIGPIPE); +#if (_POSIX_SPAWN >= 0) + posix_spawnattr_init (&p_sys->attr); + posix_spawnattr_setsigmask (&p_sys->attr, &set); posix_spawnattr_setsigdefault (&p_sys->attr, &set); posix_spawnattr_setflags (&p_sys->attr, POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK); +#endif } p_sys->suspend = false; p_sys->suspended = false; @@ -106,7 +114,9 @@ static void Close (vlc_object_t *obj) vlc_cancel (p_sys->thread); vlc_join (p_sys->thread, NULL); +#if (_POSIX_SPAWN >= 0) posix_spawnattr_destroy (&p_sys->attr); +#endif vlc_cond_destroy (&p_sys->inactive); vlc_cond_destroy (&p_sys->update); vlc_mutex_destroy (&p_sys->lock); @@ -153,8 +163,16 @@ static void *Thread (void *data) pid_t pid; vlc_mutex_unlock (&p_sys->lock); +#if (_POSIX_SPAWN >= 0) if (!posix_spawnp (&pid, "xdg-screensaver", NULL, &p_sys->attr, argv, environ)) +#else + pid = fork(); + if (pid == 0) { + execvp("xdg-screensaver", argv); + exit(1); + } else if (pid > 0) +#endif { int status;