diff -ur alsa-lib-1.0.14a.orig/src/control/control_hw.c alsa-lib-1.0.14a/src/control/control_hw.c
--- alsa-lib-1.0.14a.orig/src/control/control_hw.c 2007-06-11 15:53:13.000000000 +0700
+++ alsa-lib-1.0.14a/src/control/control_hw.c 2007-08-11 16:33:34.452035669 +0700
@@ -84,6 +84,7 @@
snd_ctl_hw_t *hw = ctl->private_data;
int fd = hw->fd;
+#ifdef HAVE_FCNTL_ASYNC
if ((flags = fcntl(fd, F_GETFL)) < 0) {
SYSERR("F_GETFL failed");
return -errno;
@@ -96,12 +97,15 @@
SYSERR("F_SETFL for O_ASYNC failed");
return -errno;
}
+#endif /* HAVE_FCNTL_ASYNC */
if (sig < 0)
return 0;
+#if !defined(sun)
if (fcntl(fd, F_SETSIG, (long)sig) < 0) {
SYSERR("F_SETSIG failed");
return -errno;
}
+#endif
if (fcntl(fd, F_SETOWN, (long)pid) < 0) {
SYSERR("F_SETOWN failed");
return -errno;
@@ -376,8 +380,10 @@
fmode = O_RDWR;
if (mode & SND_CTL_NONBLOCK)
fmode |= O_NONBLOCK;
+#ifdef HAVE_FCNTL_ASYNC
if (mode & SND_CTL_ASYNC)
fmode |= O_ASYNC;
+#endif /* HAVE_FCNTL_ASYNC */
fd = snd_open_device(filename, fmode);
if (fd < 0) {
snd_card_load(card);
diff -ur alsa-lib-1.0.14a.orig/src/timer/timer_hw.c alsa-lib-1.0.14a/src/timer/timer_hw.c
--- alsa-lib-1.0.14a.orig/src/timer/timer_hw.c 2007-06-11 15:53:14.000000000 +0700
+++ alsa-lib-1.0.14a/src/timer/timer_hw.c 2007-08-11 16:32:13.850322154 +0700
@@ -78,6 +78,7 @@
assert(timer);
fd = timer->poll_fd;
+#ifdef HAVE_FCNTL_ASYNC
if ((flags = fcntl(fd, F_GETFL)) < 0) {
SYSERR("F_GETFL failed");
return -errno;
@@ -90,12 +91,15 @@
SYSERR("F_SETFL for O_ASYNC failed");
return -errno;
}
+#endif /* HAVE_FCNTL_ASYNC */
if (sig < 0)
return 0;
+#if !defined(sun)
if (fcntl(fd, F_SETSIG, (long)sig) < 0) {
SYSERR("F_SETSIG failed");
return -errno;
}
+#endif /* !sun */
if (fcntl(fd, F_SETOWN, (long)pid) < 0) {
SYSERR("F_SETOWN failed");
return -errno;
--- alsa-lib-1.0.23.orig/src/pcm/pcm_hw.c Sun Sep 19 11:32:12 2010
+++ alsa-lib-1.0.23/src/pcm/pcm_hw.c Sun Sep 19 11:36:07 2010
@@ -223,6 +223,7 @@
snd_pcm_hw_t *hw = pcm->private_data;
int fd = hw->fd, err;
+#ifdef HAVE_FCNTL_ASYNC
if ((flags = fcntl(fd, F_GETFL)) < 0) {
err = -errno;
SYSMSG("F_GETFL failed (%i)", err);
@@ -237,13 +238,16 @@
SYSMSG("F_SETFL for O_ASYNC failed (%i)", err);
return err;
}
+#endif /* HAVE_FCNTL_ASYNC */
if (sig < 0)
return 0;
+#if !defined(sun)
if (fcntl(fd, F_SETSIG, (long)sig) < 0) {
err = -errno;
SYSMSG("F_SETSIG failed (%i)", err);
return err;
}
+#endif /* sun */
if (fcntl(fd, F_SETOWN, (long)pid) < 0) {
err = -errno;
SYSMSG("F_SETOWN failed (%i)", err);
@@ -1143,8 +1147,10 @@
mode = 0;
if (fmode & O_NONBLOCK)
mode |= SND_PCM_NONBLOCK;
+#ifdef HAVE_FCNTL_ASYNC
if (fmode & O_ASYNC)
mode |= SND_PCM_ASYNC;
+#endif /* HAVE_FCNTL_ASYNC */
if (ioctl(fd, SNDRV_PCM_IOCTL_PVERSION, &ver) < 0) {
ret = -errno;
@@ -1289,8 +1289,10 @@
fmode = O_RDWR;
if (mode & SND_PCM_NONBLOCK)
fmode |= O_NONBLOCK;
+#ifdef HAVE_FCNTL_ASYNC
if (mode & SND_PCM_ASYNC)
fmode |= O_ASYNC;
+#endif /* HAVE_FCNTL_ASYNC */
if (mode & SND_PCM_APPEND)
fmode |= O_APPEND;
fd = snd_open_device(filename, fmode);