aboutsummaryrefslogtreecommitdiff
path: root/audio/ossaudio.c
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2023-09-22 19:13:44 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2023-10-03 10:29:39 +0200
commitf6061733a96314ccb732efe6c91357d66f8970af (patch)
tree5abdb6f35d1cb78f5a46d4b7c79384070a317066 /audio/ossaudio.c
parentaaa6a6f93dc88f9201b9872fa64a565d52628208 (diff)
audio: allow returning an error from the driver init
An error is already printed by audio_driver_init, but we can make it more precise if the driver can return an Error *. Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'audio/ossaudio.c')
-rw-r--r--audio/ossaudio.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/audio/ossaudio.c b/audio/ossaudio.c
index e8d732b612..ec4448d573 100644
--- a/audio/ossaudio.c
+++ b/audio/ossaudio.c
@@ -28,6 +28,7 @@
#include "qemu/main-loop.h"
#include "qemu/module.h"
#include "qemu/host-utils.h"
+#include "qapi/error.h"
#include "audio.h"
#include "trace.h"
@@ -736,7 +737,7 @@ static void oss_init_per_direction(AudiodevOssPerDirectionOptions *opdo)
}
}
-static void *oss_audio_init(Audiodev *dev)
+static void *oss_audio_init(Audiodev *dev, Error **errp)
{
AudiodevOssOptions *oopts;
assert(dev->driver == AUDIODEV_DRIVER_OSS);
@@ -745,8 +746,12 @@ static void *oss_audio_init(Audiodev *dev)
oss_init_per_direction(oopts->in);
oss_init_per_direction(oopts->out);
- if (access(oopts->in->dev ?: "/dev/dsp", R_OK | W_OK) < 0 ||
- access(oopts->out->dev ?: "/dev/dsp", R_OK | W_OK) < 0) {
+ if (access(oopts->in->dev ?: "/dev/dsp", R_OK | W_OK) < 0) {
+ error_setg_errno(errp, errno, "%s not accessible", oopts->in->dev ?: "/dev/dsp");
+ return NULL;
+ }
+ if (access(oopts->out->dev ?: "/dev/dsp", R_OK | W_OK) < 0) {
+ error_setg_errno(errp, errno, "%s not accessible", oopts->out->dev ?: "/dev/dsp");
return NULL;
}
return dev;