util/Error: new error passing library

Replaces GLib's GError.
This commit is contained in:
Max Kellermann
2013-08-10 18:02:44 +02:00
parent c9fcc7f148
commit 29030b54c9
256 changed files with 3269 additions and 3371 deletions

View File

@@ -21,6 +21,8 @@
#include "OSXOutputPlugin.hxx"
#include "OutputAPI.hxx"
#include "util/fifo_buffer.h"
#include "util/Error.hxx"
#include "util/Domain.hxx"
#include "thread/Mutex.hxx"
#include "thread/Cond.hxx"
@@ -47,14 +49,7 @@ struct OSXOutput {
struct fifo_buffer *buffer;
};
/**
* The quark used for GError.domain.
*/
static inline GQuark
osx_output_quark(void)
{
return g_quark_from_static_string("osx_output");
}
static constexpr Domain osx_output_domain("osx_output");
static bool
osx_output_test_default_device(void)
@@ -85,10 +80,10 @@ osx_output_configure(OSXOutput *oo, const config_param &param)
}
static struct audio_output *
osx_output_init(const config_param &param, GError **error_r)
osx_output_init(const config_param &param, Error &error)
{
OSXOutput *oo = new OSXOutput();
if (!ao_base_init(&oo->base, &osx_output_plugin, param, error_r)) {
if (!ao_base_init(&oo->base, &osx_output_plugin, param, error)) {
delete oo;
return NULL;
}
@@ -107,7 +102,7 @@ osx_output_finish(struct audio_output *ao)
}
static bool
osx_output_set_device(OSXOutput *oo, GError **error)
osx_output_set_device(OSXOutput *oo, Error &error)
{
bool ret = true;
OSStatus status;
@@ -124,9 +119,9 @@ osx_output_set_device(OSXOutput *oo, GError **error)
&size,
NULL);
if (status != noErr) {
g_set_error(error, osx_output_quark(), status,
"Unable to determine number of OS X audio devices: %s",
GetMacOSStatusCommentString(status));
error.Format(osx_output_domain, status,
"Unable to determine number of OS X audio devices: %s",
GetMacOSStatusCommentString(status));
ret = false;
goto done;
}
@@ -138,9 +133,9 @@ osx_output_set_device(OSXOutput *oo, GError **error)
&size,
deviceids);
if (status != noErr) {
g_set_error(error, osx_output_quark(), status,
"Unable to determine OS X audio device IDs: %s",
GetMacOSStatusCommentString(status));
error.Format(osx_output_domain, status,
"Unable to determine OS X audio device IDs: %s",
GetMacOSStatusCommentString(status));
ret = false;
goto done;
}
@@ -152,11 +147,11 @@ osx_output_set_device(OSXOutput *oo, GError **error)
kAudioDevicePropertyDeviceName,
&size, name);
if (status != noErr) {
g_set_error(error, osx_output_quark(), status,
"Unable to determine OS X device name "
"(device %u): %s",
(unsigned int) deviceids[i],
GetMacOSStatusCommentString(status));
error.Format(osx_output_domain, status,
"Unable to determine OS X device name "
"(device %u): %s",
(unsigned int) deviceids[i],
GetMacOSStatusCommentString(status));
ret = false;
goto done;
}
@@ -180,9 +175,9 @@ osx_output_set_device(OSXOutput *oo, GError **error)
&(deviceids[i]),
sizeof(AudioDeviceID));
if (status != noErr) {
g_set_error(error, osx_output_quark(), status,
"Unable to set OS X audio output device: %s",
GetMacOSStatusCommentString(status));
error.Format(osx_output_domain, status,
"Unable to set OS X audio output device: %s",
GetMacOSStatusCommentString(status));
ret = false;
goto done;
}
@@ -237,7 +232,7 @@ osx_render(void *vdata,
}
static bool
osx_output_enable(struct audio_output *ao, GError **error_r)
osx_output_enable(struct audio_output *ao, Error &error)
{
OSXOutput *oo = (OSXOutput *)ao;
@@ -250,20 +245,20 @@ osx_output_enable(struct audio_output *ao, GError **error_r)
Component comp = FindNextComponent(NULL, &desc);
if (comp == 0) {
g_set_error(error_r, osx_output_quark(), 0,
"Error finding OS X component");
error.Set(osx_output_domain,
"Error finding OS X component");
return false;
}
OSStatus status = OpenAComponent(comp, &oo->au);
if (status != noErr) {
g_set_error(error_r, osx_output_quark(), status,
"Unable to open OS X component: %s",
GetMacOSStatusCommentString(status));
error.Format(osx_output_domain, status,
"Unable to open OS X component: %s",
GetMacOSStatusCommentString(status));
return false;
}
if (!osx_output_set_device(oo, error_r)) {
if (!osx_output_set_device(oo, error)) {
CloseComponent(oo->au);
return false;
}
@@ -279,8 +274,8 @@ osx_output_enable(struct audio_output *ao, GError **error_r)
&callback, sizeof(callback));
if (result != noErr) {
CloseComponent(oo->au);
g_set_error(error_r, osx_output_quark(), result,
"unable to set callback for OS X audio unit");
error.Set(osx_output_domain, result,
"unable to set callback for OS X audio unit");
return false;
}
@@ -316,7 +311,8 @@ osx_output_close(struct audio_output *ao)
}
static bool
osx_output_open(struct audio_output *ao, AudioFormat &audio_format, GError **error)
osx_output_open(struct audio_output *ao, AudioFormat &audio_format,
Error &error)
{
OSXOutput *od = (OSXOutput *)ao;
@@ -359,16 +355,16 @@ osx_output_open(struct audio_output *ao, AudioFormat &audio_format, GError **err
&stream_description,
sizeof(stream_description));
if (result != noErr) {
g_set_error(error, osx_output_quark(), result,
"Unable to set format on OS X device");
error.Set(osx_output_domain, result,
"Unable to set format on OS X device");
return false;
}
OSStatus status = AudioUnitInitialize(od->au);
if (status != noErr) {
g_set_error(error, osx_output_quark(), status,
"Unable to initialize OS X audio unit: %s",
GetMacOSStatusCommentString(status));
error.Set(osx_output_domain, status,
"Unable to initialize OS X audio unit: %s",
GetMacOSStatusCommentString(status));
return false;
}
@@ -379,9 +375,9 @@ osx_output_open(struct audio_output *ao, AudioFormat &audio_format, GError **err
status = AudioOutputUnitStart(od->au);
if (status != 0) {
AudioUnitUninitialize(od->au);
g_set_error(error, osx_output_quark(), status,
"unable to start audio output: %s",
GetMacOSStatusCommentString(status));
error.Format(osx_output_domain, status,
"unable to start audio output: %s",
GetMacOSStatusCommentString(status));
return false;
}
@@ -390,7 +386,7 @@ osx_output_open(struct audio_output *ao, AudioFormat &audio_format, GError **err
static size_t
osx_output_play(struct audio_output *ao, const void *chunk, size_t size,
gcc_unused GError **error)
gcc_unused Error &error)
{
OSXOutput *od = (OSXOutput *)ao;