pkgsrc/multimedia/vlc20/patches/patch-as
wiz 731702fa11 Re-Import vlc-2.0.9nb21 (from vlc2) as multimedia/vlc20.
To better clarify which version this packages.

VideoLAN is a project of French students from the Ecole Centrale Paris
and developers from all over the world. Its main goals is MPEG streaming
on a network, but it also features a standalone multimedia player. The
VideoLAN Server can stream video read from a hard disk, a DVD player,
a satellite card or an MPEG 2 compression card, and unicast or multicast
it on a network. The VideoLAN Client can read the stream from the network
and display it. It can also be used to display video read locally on
the computer : DVDs, VCDs, MPEG and DivX files and from a satellite
card. It is multi-plaform : Linux, Windows, Mac OS X, BeOS, BSD, Solaris,
QNX, iPaq... The VideoLAN Client and Server now have a full IPv6 support.

This version is the last version with support for OSSv3, which is the
OSS version implemented in NetBSD before NetBSD 7.
2015-10-25 10:52:24 +00:00

110 lines
3.1 KiB
Text

$NetBSD: patch-as,v 1.1 2015/10/25 10:52:24 wiz Exp $
--- modules/misc/inhibit/xscreensaver.c~ 2010-04-13 09:22:27.000000000 +0900
+++ modules/misc/inhibit/xscreensaver.c 2011-01-08 23:03:09.000000000 +0900
@@ -39,7 +39,9 @@
#include <sys/wait.h>
#include <fcntl.h>
#include <signal.h>
+#ifdef _POSIX_SPAWN
#include <spawn.h>
+#endif
/*****************************************************************************
* Local prototypes
@@ -53,12 +55,16 @@
struct vlc_inhibit_sys
{
vlc_timer_t timer;
+#ifdef _POSIX_SPAWN
posix_spawn_file_actions_t actions;
posix_spawnattr_t attr;
int nullfd;
+#endif
};
+#ifdef _POSIX_SPAWN
extern char **environ;
+#endif
/*****************************************************************************
* Module descriptor
@@ -88,6 +94,7 @@
}
p_ih->inhibit = Inhibit;
+#ifdef _POSIX_SPAWN
int fd = vlc_open ("/dev/null", O_WRONLY);
posix_spawn_file_actions_init (&p_sys->actions);
if (fd != -1)
@@ -103,6 +110,7 @@
sigemptyset (&set);
posix_spawnattr_setsigmask (&p_sys->attr, &set);
+#endif
return VLC_SUCCESS;
}
@@ -115,10 +123,12 @@
vlc_inhibit_sys_t *p_sys = p_ih->p_sys;
vlc_timer_destroy( p_sys->timer );
+#ifdef _POSIX_SPAWN
if (p_sys->nullfd != -1)
close (p_sys->nullfd);
posix_spawnattr_destroy (&p_sys->attr);
posix_spawn_file_actions_destroy (&p_sys->actions);
+#endif
free( p_sys );
}
@@ -131,15 +141,49 @@
/*****************************************************************************
* Execute: Spawns a process using execv()
*****************************************************************************/
+#ifdef _POSIX_SPAWN
static void Execute (vlc_inhibit_t *p_ih, const char *const *argv)
+# else
+static void Execute (vlc_inhibit_t *p_ih, const char *const *ppsz_args)
+#endif
{
+#ifdef _POSIX_SPAWN
vlc_inhibit_sys_t *p_sys = p_ih->p_sys;
pid_t pid;
if (posix_spawnp (&pid, argv[0], &p_sys->actions, &p_sys->attr,
(char **)argv, environ) == 0)
+#else
+ pid_t pid = fork();
+ switch ( pid )
+#endif
{
+#ifdef _POSIX_SPAWN
while (waitpid (pid, NULL, 0) != pid);
+#else
+ case 0: /* we're the child */
+ {
+ sigset_t set;
+ sigemptyset (&set);
+ pthread_sigmask (SIG_SETMASK, &set, NULL);
+
+ /* We don't want output */
+ if( ( freopen( "/dev/null", "w", stdout ) != NULL )
+ && ( freopen( "/dev/null", "w", stderr ) != NULL ) )
+ execv( ppsz_args[0] , (char *const *)ppsz_args );
+ /* If the file we want to execute doesn't exist we exit() */
+ exit( EXIT_FAILURE );
+ }
+ case -1: /* we're the error */
+ msg_Dbg( p_ih, "Couldn't fork() while launching %s",
+ ppsz_args[0] );
+ break;
+ default: /* we're the parent */
+ /* Wait for the child to exit.
+ * We will not deadlock because we ran "/bin/sh &" */
+ while( waitpid( pid, NULL, 0 ) != pid);
+ break;
+#endif
}
}