Also add a patch by drochner: pthread_key_create returns 0 on success; return values on failure are not defined. Remaining patches without comments: patch-ab: adding an ifdef notyet in src/daemon/main.c patch-a{c,e}: --start -> -D (no idea why) patch-af: allow some Linux-only code also on NetBSD
185 lines
6.3 KiB
Text
185 lines
6.3 KiB
Text
$NetBSD: patch-aa,v 1.7 2011/05/21 15:32:59 wiz Exp $
|
|
|
|
SNDDSP_GETODELAY isn't defined on NetBSD-4.x.
|
|
ioctl() takes u_long argument on NetBSD.
|
|
On NetBSD, use third parameter in ioctl instead of varargs.
|
|
stat() system call has been versioned, use latest version when dlopen()ing.
|
|
Try more typical device names.
|
|
|
|
--- src/utils/padsp.c.orig 2009-09-18 20:21:44.000000000 +0000
|
|
+++ src/utils/padsp.c
|
|
@@ -60,6 +60,10 @@
|
|
# define SIOCINQ FIONREAD
|
|
#endif
|
|
|
|
+#if !defined(SNDCTL_DSP_GETODELAY)
|
|
+# define SNDCTL_DSP_GETODELAY _IOR ('P', 23, int)
|
|
+#endif
|
|
+
|
|
/* make sure gcc doesn't redefine open and friends as macros */
|
|
#undef open
|
|
#undef open64
|
|
@@ -115,7 +119,11 @@ static pthread_mutex_t func_mutex = PTHR
|
|
|
|
static PA_LLIST_HEAD(fd_info, fd_infos) = NULL;
|
|
|
|
+#ifdef __NetBSD__
|
|
+static int (*_ioctl)(int, u_long, void *) = NULL;
|
|
+#else
|
|
static int (*_ioctl)(int, int, void*) = NULL;
|
|
+#endif
|
|
static int (*_close)(int) = NULL;
|
|
static int (*_open)(const char *, int, mode_t) = NULL;
|
|
static FILE* (*_fopen)(const char *path, const char *mode) = NULL;
|
|
@@ -141,6 +149,15 @@ static inline fnptr dlsym_fn(void *handl
|
|
return (fnptr) (long) dlsym(handle, symbol);
|
|
}
|
|
|
|
+#ifdef __NetBSD__
|
|
+#define LOAD_IOCTL_FUNC() \
|
|
+do { \
|
|
+ pthread_mutex_lock(&func_mutex); \
|
|
+ if (!_ioctl) \
|
|
+ _ioctl = (int (*)(int, u_long, void*)) dlsym_fn(RTLD_NEXT, "ioctl"); \
|
|
+ pthread_mutex_unlock(&func_mutex); \
|
|
+} while(0)
|
|
+#else
|
|
#define LOAD_IOCTL_FUNC() \
|
|
do { \
|
|
pthread_mutex_lock(&func_mutex); \
|
|
@@ -148,6 +165,7 @@ do { \
|
|
_ioctl = (int (*)(int, int, void*)) dlsym_fn(RTLD_NEXT, "ioctl"); \
|
|
pthread_mutex_unlock(&func_mutex); \
|
|
} while(0)
|
|
+#endif
|
|
|
|
#define LOAD_OPEN_FUNC() \
|
|
do { \
|
|
@@ -181,11 +199,16 @@ do { \
|
|
pthread_mutex_unlock(&func_mutex); \
|
|
} while(0)
|
|
|
|
+#ifdef __NetBSD__
|
|
+#define STAT_FUNC "__stat30"
|
|
+#else
|
|
+#define STAT_FUNC "stat"
|
|
+#endif
|
|
#define LOAD_STAT_FUNC() \
|
|
do { \
|
|
pthread_mutex_lock(&func_mutex); \
|
|
if (!_stat) \
|
|
- _stat = (int (*)(const char *, struct stat *)) dlsym_fn(RTLD_NEXT, "stat"); \
|
|
+ _stat = (int (*)(const char *, struct stat *)) dlsym_fn(RTLD_NEXT, STAT_FUNC); \
|
|
pthread_mutex_unlock(&func_mutex); \
|
|
} while(0)
|
|
|
|
@@ -1458,7 +1481,8 @@ static int real_open(const char *filenam
|
|
return _open(filename, flags, mode);
|
|
}
|
|
|
|
- if (filename && dsp_cloak_enable() && (strcmp(filename, "/dev/dsp") == 0 || strcmp(filename, "/dev/adsp") == 0))
|
|
+ if (filename && dsp_cloak_enable() && (strcmp(filename, "/dev/dsp") == 0 || strcmp(filename, "/dev/adsp") == 0 ||
|
|
+ strcmp(filename, "/dev/sound") == 0 || strcmp(filename, "/dev/audio") == 0))
|
|
r = dsp_open(flags, &_errno);
|
|
else if (filename && mixer_cloak_enable() && strcmp(filename, "/dev/mixer") == 0)
|
|
r = mixer_open(flags, &_errno);
|
|
@@ -2319,19 +2343,27 @@ fail:
|
|
|
|
#ifdef sun
|
|
int ioctl(int fd, int request, ...) {
|
|
+#elif defined(__NetBSD__)
|
|
+int ioctl(int fd, u_long request, void *_argp) {
|
|
#else
|
|
int ioctl(int fd, unsigned long request, ...) {
|
|
#endif
|
|
fd_info *i;
|
|
+#ifndef __NetBSD__
|
|
va_list args;
|
|
+#endif
|
|
void *argp;
|
|
int r, _errno = 0;
|
|
|
|
debug(DEBUG_LEVEL_VERBOSE, __FILE__": ioctl()\n");
|
|
|
|
+#ifdef __NetBSD__
|
|
+ argp = _argp;
|
|
+#else
|
|
va_start(args, request);
|
|
argp = va_arg(args, void *);
|
|
va_end(args);
|
|
+#endif
|
|
|
|
if (!function_enter()) {
|
|
LOAD_IOCTL_FUNC();
|
|
@@ -2390,6 +2422,8 @@ int access(const char *pathname, int mod
|
|
if (!pathname ||
|
|
(strcmp(pathname, "/dev/dsp") != 0 &&
|
|
strcmp(pathname, "/dev/adsp") != 0 &&
|
|
+ strcmp(pathname, "/dev/sound") != 0 &&
|
|
+ strcmp(pathname, "/dev/audio") != 0 &&
|
|
strcmp(pathname, "/dev/sndstat") != 0 &&
|
|
strcmp(pathname, "/dev/mixer") != 0 )) {
|
|
LOAD_ACCESS_FUNC();
|
|
@@ -2418,6 +2452,8 @@ int stat(const char *pathname, struct st
|
|
if (!pathname ||
|
|
!buf ||
|
|
( strcmp(pathname, "/dev/dsp") != 0 &&
|
|
+ strcmp(pathname, "/dev/sound") != 0 &&
|
|
+ strcmp(pathname, "/dev/audio") != 0 &&
|
|
strcmp(pathname, "/dev/adsp") != 0 &&
|
|
strcmp(pathname, "/dev/sndstat") != 0 &&
|
|
strcmp(pathname, "/dev/mixer") != 0 )) {
|
|
@@ -2475,6 +2511,8 @@ int stat64(const char *pathname, struct
|
|
if (!pathname ||
|
|
!buf ||
|
|
( strcmp(pathname, "/dev/dsp") != 0 &&
|
|
+ strcmp(pathname, "/dev/sound") != 0 &&
|
|
+ strcmp(pathname, "/dev/audio") != 0 &&
|
|
strcmp(pathname, "/dev/adsp") != 0 &&
|
|
strcmp(pathname, "/dev/sndstat") != 0 &&
|
|
strcmp(pathname, "/dev/mixer") != 0 )) {
|
|
@@ -2520,6 +2558,8 @@ int open64(const char *filename, int fla
|
|
|
|
if (!filename ||
|
|
( strcmp(filename, "/dev/dsp") != 0 &&
|
|
+ strcmp(filename, "/dev/sound") != 0 &&
|
|
+ strcmp(filename, "/dev/audio") != 0 &&
|
|
strcmp(filename, "/dev/adsp") != 0 &&
|
|
strcmp(filename, "/dev/sndstat") != 0 &&
|
|
strcmp(filename, "/dev/mixer") != 0 )) {
|
|
@@ -2540,6 +2580,8 @@ int __xstat(int ver, const char *pathnam
|
|
if (!pathname ||
|
|
!buf ||
|
|
( strcmp(pathname, "/dev/dsp") != 0 &&
|
|
+ strcmp(pathname, "/dev/sound") != 0 &&
|
|
+ strcmp(pathname, "/dev/audio") != 0 &&
|
|
strcmp(pathname, "/dev/adsp") != 0 &&
|
|
strcmp(pathname, "/dev/sndstat") != 0 &&
|
|
strcmp(pathname, "/dev/mixer") != 0 )) {
|
|
@@ -2563,6 +2605,8 @@ int __xstat64(int ver, const char *pathn
|
|
if (!pathname ||
|
|
!buf ||
|
|
( strcmp(pathname, "/dev/dsp") != 0 &&
|
|
+ strcmp(pathname, "/dev/sound") != 0 &&
|
|
+ strcmp(pathname, "/dev/audio") != 0 &&
|
|
strcmp(pathname, "/dev/adsp") != 0 &&
|
|
strcmp(pathname, "/dev/sndstat") != 0 &&
|
|
strcmp(pathname, "/dev/mixer") != 0 )) {
|
|
@@ -2592,6 +2636,8 @@ FILE* fopen(const char *filename, const
|
|
if (!filename ||
|
|
!mode ||
|
|
( strcmp(filename, "/dev/dsp") != 0 &&
|
|
+ strcmp(filename, "/dev/sound") != 0 &&
|
|
+ strcmp(filename, "/dev/audio") != 0 &&
|
|
strcmp(filename, "/dev/adsp") != 0 &&
|
|
strcmp(filename, "/dev/sndstat") != 0 &&
|
|
strcmp(filename, "/dev/mixer") != 0 )) {
|
|
@@ -2635,6 +2681,8 @@ FILE *fopen64(const char *filename, cons
|
|
if (!filename ||
|
|
!mode ||
|
|
( strcmp(filename, "/dev/dsp") != 0 &&
|
|
+ strcmp(filename, "/dev/sound") != 0 &&
|
|
+ strcmp(filename, "/dev/audio") != 0 &&
|
|
strcmp(filename, "/dev/adsp") != 0 &&
|
|
strcmp(filename, "/dev/sndstat") != 0 &&
|
|
strcmp(filename, "/dev/mixer") != 0 )) {
|