Skip to content

Commit

Permalink
audio: return Error ** from audio_state_by_name
Browse files Browse the repository at this point in the history
Remove duplicate error formatting code.

Signed-off-by: Paolo Bonzini <[email protected]>
  • Loading branch information
bonzini committed Oct 3, 2023
1 parent f606173 commit 176adaf
Show file tree
Hide file tree
Showing 6 changed files with 13 additions and 20 deletions.
6 changes: 4 additions & 2 deletions audio/audio-hmp-cmds.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#include "audio/audio.h"
#include "monitor/hmp.h"
#include "monitor/monitor.h"
#include "qapi/error.h"
#include "qapi/qmp/qdict.h"

static QLIST_HEAD (capture_list_head, CaptureState) capture_head;
Expand Down Expand Up @@ -65,10 +66,11 @@ void hmp_wavcapture(Monitor *mon, const QDict *qdict)
int nchannels = qdict_get_try_int(qdict, "nchannels", 2);
const char *audiodev = qdict_get_str(qdict, "audiodev");
CaptureState *s;
AudioState *as = audio_state_by_name(audiodev);
Error *local_err = NULL;
AudioState *as = audio_state_by_name(audiodev, &local_err);

if (!as) {
monitor_printf(mon, "Audiodev '%s' not found\n", audiodev);
error_report_err(local_err);
return;
}

Expand Down
3 changes: 2 additions & 1 deletion audio/audio.c
Original file line number Diff line number Diff line change
Expand Up @@ -2260,7 +2260,7 @@ int audio_buffer_bytes(AudiodevPerDirectionOptions *pdo,
audioformat_bytes_per_sample(as->fmt);
}

AudioState *audio_state_by_name(const char *name)
AudioState *audio_state_by_name(const char *name, Error **errp)
{
AudioState *s;
QTAILQ_FOREACH(s, &audio_states, list) {
Expand All @@ -2269,6 +2269,7 @@ AudioState *audio_state_by_name(const char *name)
return s;
}
}
error_setg(errp, "audiodev '%s' not found", name);
return NULL;
}

Expand Down
2 changes: 1 addition & 1 deletion audio/audio.h
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ bool audio_init_audiodevs(void);
void audio_help(void);
void audio_legacy_help(void);

AudioState *audio_state_by_name(const char *name);
AudioState *audio_state_by_name(const char *name, Error **errp);
const char *audio_get_id(QEMUSoundCard *card);

#define DEFINE_AUDIO_PROPERTIES(_s, _f) \
Expand Down
16 changes: 4 additions & 12 deletions hw/core/qdev-properties-system.c
Original file line number Diff line number Diff line change
Expand Up @@ -480,24 +480,16 @@ static void set_audiodev(Object *obj, Visitor *v, const char* name,
Property *prop = opaque;
QEMUSoundCard *card = object_field_prop_ptr(obj, prop);
AudioState *state;
int err = 0;
char *str;
g_autofree char *str = NULL;

if (!visit_type_str(v, name, &str, errp)) {
return;
}

state = audio_state_by_name(str);

if (!state) {
err = -ENOENT;
goto out;
state = audio_state_by_name(str, errp);
if (state) {
card->state = state;
}
card->state = state;

out:
error_set_from_qdev_prop_error(errp, err, obj, name, str);
g_free(str);
}

const PropertyInfo qdev_prop_audiodev = {
Expand Down
3 changes: 1 addition & 2 deletions ui/dbus.c
Original file line number Diff line number Diff line change
Expand Up @@ -220,9 +220,8 @@ dbus_display_complete(UserCreatable *uc, Error **errp)
}

if (dd->audiodev && *dd->audiodev) {
AudioState *audio_state = audio_state_by_name(dd->audiodev);
AudioState *audio_state = audio_state_by_name(dd->audiodev, errp);
if (!audio_state) {
error_setg(errp, "Audiodev '%s' not found", dd->audiodev);
return;
}
if (!g_str_equal(audio_state->drv->name, "dbus")) {
Expand Down
3 changes: 1 addition & 2 deletions ui/vnc.c
Original file line number Diff line number Diff line change
Expand Up @@ -4181,9 +4181,8 @@ void vnc_display_open(const char *id, Error **errp)

audiodev = qemu_opt_get(opts, "audiodev");
if (audiodev) {
vd->audio_state = audio_state_by_name(audiodev);
vd->audio_state = audio_state_by_name(audiodev, errp);
if (!vd->audio_state) {
error_setg(errp, "Audiodev '%s' not found", audiodev);
goto fail;
}
}
Expand Down

0 comments on commit 176adaf

Please sign in to comment.