chiark / gitweb /
Set Disobedience login default in a way that doesn't override
[disorder] / server / speaker-oss.c
index f9a298cc0d26a28af71a7bad8fe26ebabca8b591..95dcfe397cad023129ad9721ba48fd7807d0c582 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * This file is part of DisOrder
- * Copyright (C) 2007 Richard Kettlewell
+ * Copyright (C) 2007, 2008 Richard Kettlewell
+ * Portions copyright (C) 2007 Ross Younger
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 /** @file server/speaker-oss.c
  * @brief Support for @ref BACKEND_OSS */
 
-#include <config.h>
+#include "common.h"
 
 #if HAVE_SYS_SOUNDCARD_H
 
-#include "types.h"
-
 #include <unistd.h>
 #include <poll.h>
-#include <string.h>
 #include <fcntl.h>
 #include <unistd.h>
 #include <errno.h>
@@ -71,6 +69,15 @@ static void oss_activate(void) {
        device = "/dev/dsp";
       else if(access("/dev/audio", W_OK) == 0)
        device = "/dev/audio";
+      else {
+        static int reported;
+        
+        if(!reported) {
+          error(0, "cannot determine default OSS device");
+          reported = 1;
+        }
+        goto failed;
+      }
     } else
       device = config->device; /* just believe the user */
     /* Open the device */
@@ -111,8 +118,10 @@ static void oss_activate(void) {
   return;
 failed:
   device_state = device_error;
-  if(ossfd >= 0)
+  if(ossfd >= 0) {
     xclose(ossfd);
+    ossfd = -1;
+  }
 }
 
 /** @brief Play via OSS */
@@ -136,7 +145,7 @@ static size_t oss_play(size_t frames) {
 static int oss_slot;
 
 /** @brief Fill in poll fd array for OSS */
-static void oss_beforepoll(void) {
+static void oss_beforepoll(int attribute((unused)) *timeoutp) {
   oss_slot = addfd(ossfd, POLLOUT|POLLERR);
 }