audio: simplify audio_driver_init()
Catch and return from error early to avoid indentations and ease the flow & return a bool for success value. All driver init() calls have been checked to set errp on error. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
This commit is contained in:
parent
952742ec6b
commit
ebf3a6e856
1 changed files with 21 additions and 29 deletions
|
|
@ -1562,35 +1562,27 @@ size_t audio_generic_read(HWVoiceIn *hw, void *buf, size_t size)
|
|||
return total;
|
||||
}
|
||||
|
||||
static int audio_driver_init(AudioState *s, struct audio_driver *drv,
|
||||
Audiodev *dev, Error **errp)
|
||||
static bool audio_driver_init(AudioState *s, struct audio_driver *drv,
|
||||
Audiodev *dev, Error **errp)
|
||||
{
|
||||
Error *local_err = NULL;
|
||||
|
||||
s->drv_opaque = drv->init(dev, &local_err);
|
||||
|
||||
if (s->drv_opaque) {
|
||||
if (!drv->pcm_ops->get_buffer_in) {
|
||||
drv->pcm_ops->get_buffer_in = audio_generic_get_buffer_in;
|
||||
drv->pcm_ops->put_buffer_in = audio_generic_put_buffer_in;
|
||||
}
|
||||
if (!drv->pcm_ops->get_buffer_out) {
|
||||
drv->pcm_ops->get_buffer_out = audio_generic_get_buffer_out;
|
||||
drv->pcm_ops->put_buffer_out = audio_generic_put_buffer_out;
|
||||
}
|
||||
|
||||
audio_init_nb_voices_out(s, drv, 1);
|
||||
audio_init_nb_voices_in(s, drv, 0);
|
||||
s->drv = drv;
|
||||
return 0;
|
||||
} else {
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
} else {
|
||||
error_setg(errp, "Could not init `%s' audio driver", drv->name);
|
||||
}
|
||||
return -1;
|
||||
s->drv_opaque = drv->init(dev, errp);
|
||||
if (!s->drv_opaque) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!drv->pcm_ops->get_buffer_in) {
|
||||
drv->pcm_ops->get_buffer_in = audio_generic_get_buffer_in;
|
||||
drv->pcm_ops->put_buffer_in = audio_generic_put_buffer_in;
|
||||
}
|
||||
if (!drv->pcm_ops->get_buffer_out) {
|
||||
drv->pcm_ops->get_buffer_out = audio_generic_get_buffer_out;
|
||||
drv->pcm_ops->put_buffer_out = audio_generic_put_buffer_out;
|
||||
}
|
||||
|
||||
audio_init_nb_voices_out(s, drv, 1);
|
||||
audio_init_nb_voices_in(s, drv, 0);
|
||||
s->drv = drv;
|
||||
return true;
|
||||
}
|
||||
|
||||
static void audio_vm_change_state_handler (void *opaque, bool running,
|
||||
|
|
@ -1748,7 +1740,7 @@ static AudioState *audio_init(Audiodev *dev, Error **errp)
|
|||
drvname = AudiodevDriver_str(dev->driver);
|
||||
driver = audio_driver_lookup(drvname);
|
||||
if (driver) {
|
||||
done = !audio_driver_init(s, driver, dev, errp);
|
||||
done = audio_driver_init(s, driver, dev, errp);
|
||||
} else {
|
||||
error_setg(errp, "Unknown audio driver `%s'", drvname);
|
||||
}
|
||||
|
|
@ -1768,7 +1760,7 @@ static AudioState *audio_init(Audiodev *dev, Error **errp)
|
|||
g_free(e);
|
||||
drvname = AudiodevDriver_str(dev->driver);
|
||||
driver = audio_driver_lookup(drvname);
|
||||
if (!audio_driver_init(s, driver, dev, NULL)) {
|
||||
if (audio_driver_init(s, driver, dev, NULL)) {
|
||||
break;
|
||||
}
|
||||
qapi_free_Audiodev(dev);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue