4fd38b9
From ff2474e5fc9eaa4c7f687e71a39a5bed4f56c259 Mon Sep 17 00:00:00 2001
4fd38b9
From: Lennart Poettering <lennart@poettering.net>
4fd38b9
Date: Tue, 16 Feb 2010 02:03:45 +0100
4fd38b9
Subject: [PATCH 39/62] padsp: emulate /dev/audio, too
4fd38b9
4fd38b9
https://bugzilla.redhat.com/show_bug.cgi?id=561262
4fd38b9
---
4fd38b9
 src/utils/padsp.c |   55 +++++++++++++++++++---------------------------------
4fd38b9
 1 files changed, 20 insertions(+), 35 deletions(-)
4fd38b9
4fd38b9
diff --git a/src/utils/padsp.c b/src/utils/padsp.c
4fd38b9
index 2ed0a03..fb756d3 100644
4fd38b9
--- a/src/utils/padsp.c
4fd38b9
+++ b/src/utils/padsp.c
4fd38b9
@@ -1458,11 +1458,11 @@ static int real_open(const char *filename, int flags, mode_t mode) {
4fd38b9
         return _open(filename, flags, mode);
4fd38b9
     }
4fd38b9
 
4fd38b9
-    if (filename && dsp_cloak_enable() && (strcmp(filename, "/dev/dsp") == 0 || strcmp(filename, "/dev/adsp") == 0))
4fd38b9
+    if (filename && dsp_cloak_enable() && (pa_streq(filename, "/dev/dsp") || pa_streq(filename, "/dev/adsp") || pa_streq(filename, "/dev/audio")))
4fd38b9
         r = dsp_open(flags, &_errno);
4fd38b9
-    else if (filename && mixer_cloak_enable() && strcmp(filename, "/dev/mixer") == 0)
4fd38b9
+    else if (filename && mixer_cloak_enable() && pa_streq(filename, "/dev/mixer"))
4fd38b9
         r = mixer_open(flags, &_errno);
4fd38b9
-    else if (filename && sndstat_cloak_enable() && strcmp(filename, "/dev/sndstat") == 0)
4fd38b9
+    else if (filename && sndstat_cloak_enable() && pa_streq(filename, "/dev/sndstat"))
4fd38b9
         r = sndstat_open(flags, &_errno);
4fd38b9
     else {
4fd38b9
         function_exit();
4fd38b9
@@ -2383,15 +2383,21 @@ int close(int fd) {
4fd38b9
     return 0;
4fd38b9
 }
4fd38b9
 
4fd38b9
+static pa_bool_t is_audio_device_node(const char *path) {
4fd38b9
+    return
4fd38b9
+        pa_streq(path, "/dev/dsp") ||
4fd38b9
+        pa_streq(path, "/dev/adsp") ||
4fd38b9
+        pa_streq(path, "/dev/audio") ||
4fd38b9
+        pa_streq(path, "/dev/sndstat") ||
4fd38b9
+        pa_streq(path, "/dev/mixer");
4fd38b9
+}
4fd38b9
+
4fd38b9
 int access(const char *pathname, int mode) {
4fd38b9
 
4fd38b9
     debug(DEBUG_LEVEL_VERBOSE, __FILE__": access(%s)\n", pathname?pathname:"NULL");
4fd38b9
 
4fd38b9
     if (!pathname ||
4fd38b9
-        (strcmp(pathname, "/dev/dsp") != 0 &&
4fd38b9
-         strcmp(pathname, "/dev/adsp") != 0 &&
4fd38b9
-         strcmp(pathname, "/dev/sndstat") != 0 &&
4fd38b9
-         strcmp(pathname, "/dev/mixer") != 0 )) {
4fd38b9
+        !is_audio_device_node(pathname)) {
4fd38b9
         LOAD_ACCESS_FUNC();
4fd38b9
         return _access(pathname, mode);
4fd38b9
     }
4fd38b9
@@ -2417,10 +2423,7 @@ int stat(const char *pathname, struct stat *buf) {
4fd38b9
 
4fd38b9
     if (!pathname ||
4fd38b9
         !buf ||
4fd38b9
-        ( strcmp(pathname, "/dev/dsp") != 0 &&
4fd38b9
-          strcmp(pathname, "/dev/adsp") != 0 &&
4fd38b9
-          strcmp(pathname, "/dev/sndstat") != 0 &&
4fd38b9
-          strcmp(pathname, "/dev/mixer") != 0 )) {
4fd38b9
+        !is_audio_device_node(pathname)) {
4fd38b9
         debug(DEBUG_LEVEL_VERBOSE, __FILE__": stat(%s)\n", pathname?pathname:"NULL");
4fd38b9
         LOAD_STAT_FUNC();
4fd38b9
         return _stat(pathname, buf);
4fd38b9
@@ -2474,10 +2477,7 @@ int stat64(const char *pathname, struct stat64 *buf) {
4fd38b9
 
4fd38b9
     if (!pathname ||
4fd38b9
         !buf ||
4fd38b9
-        ( strcmp(pathname, "/dev/dsp") != 0 &&
4fd38b9
-          strcmp(pathname, "/dev/adsp") != 0 &&
4fd38b9
-          strcmp(pathname, "/dev/sndstat") != 0 &&
4fd38b9
-          strcmp(pathname, "/dev/mixer") != 0 )) {
4fd38b9
+        !is_audio_device_node(pathname)) {
4fd38b9
         LOAD_STAT64_FUNC();
4fd38b9
         return _stat64(pathname, buf);
4fd38b9
     }
4fd38b9
@@ -2519,10 +2519,7 @@ int open64(const char *filename, int flags, ...) {
4fd38b9
     }
4fd38b9
 
4fd38b9
     if (!filename ||
4fd38b9
-        ( strcmp(filename, "/dev/dsp") != 0 &&
4fd38b9
-          strcmp(filename, "/dev/adsp") != 0 &&
4fd38b9
-          strcmp(filename, "/dev/sndstat") != 0 &&
4fd38b9
-          strcmp(filename, "/dev/mixer") != 0 )) {
4fd38b9
+        !is_audio_device_node(filename)) {
4fd38b9
         LOAD_OPEN64_FUNC();
4fd38b9
         return _open64(filename, flags, mode);
4fd38b9
     }
4fd38b9
@@ -2539,10 +2536,7 @@ int __xstat(int ver, const char *pathname, struct stat *buf) {
4fd38b9
 
4fd38b9
     if (!pathname ||
4fd38b9
         !buf ||
4fd38b9
-        ( strcmp(pathname, "/dev/dsp") != 0 &&
4fd38b9
-          strcmp(pathname, "/dev/adsp") != 0 &&
4fd38b9
-          strcmp(pathname, "/dev/sndstat") != 0 &&
4fd38b9
-          strcmp(pathname, "/dev/mixer") != 0 )) {
4fd38b9
+        !is_audio_device_node(pathname)) {
4fd38b9
         LOAD_XSTAT_FUNC();
4fd38b9
         return ___xstat(ver, pathname, buf);
4fd38b9
     }
4fd38b9
@@ -2562,10 +2556,7 @@ int __xstat64(int ver, const char *pathname, struct stat64 *buf) {
4fd38b9
 
4fd38b9
     if (!pathname ||
4fd38b9
         !buf ||
4fd38b9
-        ( strcmp(pathname, "/dev/dsp") != 0 &&
4fd38b9
-          strcmp(pathname, "/dev/adsp") != 0 &&
4fd38b9
-          strcmp(pathname, "/dev/sndstat") != 0 &&
4fd38b9
-          strcmp(pathname, "/dev/mixer") != 0 )) {
4fd38b9
+        !is_audio_device_node(pathname)) {
4fd38b9
         LOAD_XSTAT64_FUNC();
4fd38b9
         return ___xstat64(ver, pathname, buf);
4fd38b9
     }
4fd38b9
@@ -2591,10 +2582,7 @@ FILE* fopen(const char *filename, const char *mode) {
4fd38b9
 
4fd38b9
     if (!filename ||
4fd38b9
         !mode ||
4fd38b9
-        ( strcmp(filename, "/dev/dsp") != 0 &&
4fd38b9
-          strcmp(filename, "/dev/adsp") != 0 &&
4fd38b9
-          strcmp(filename, "/dev/sndstat") != 0 &&
4fd38b9
-          strcmp(filename, "/dev/mixer") != 0 )) {
4fd38b9
+        !is_audio_device_node(filename)) {
4fd38b9
         LOAD_FOPEN_FUNC();
4fd38b9
         return _fopen(filename, mode);
4fd38b9
     }
4fd38b9
@@ -2634,10 +2622,7 @@ FILE *fopen64(const char *filename, const char *mode) {
4fd38b9
 
4fd38b9
     if (!filename ||
4fd38b9
         !mode ||
4fd38b9
-        ( strcmp(filename, "/dev/dsp") != 0 &&
4fd38b9
-          strcmp(filename, "/dev/adsp") != 0 &&
4fd38b9
-          strcmp(filename, "/dev/sndstat") != 0 &&
4fd38b9
-          strcmp(filename, "/dev/mixer") != 0 )) {
4fd38b9
+        !is_audio_device_node(filename)) {
4fd38b9
         LOAD_FOPEN64_FUNC();
4fd38b9
         return _fopen64(filename, mode);
4fd38b9
     }
4fd38b9
-- 
4fd38b9
1.7.0
4fd38b9