aboutsummaryrefslogtreecommitdiffstats
path: root/src/mixer/OssMixerPlugin.cxx
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2013-08-10 18:02:44 +0200
committerMax Kellermann <max@duempel.org>2013-09-04 18:14:22 +0200
commit29030b54c98b0aee65fbc10ebf7ba36bed98c02c (patch)
tree79766830b55ebca38ddbce84d8d548227eedb69e /src/mixer/OssMixerPlugin.cxx
parentc9fcc7f14860777458153eb2d13c773ccfa1daa2 (diff)
downloadmpd-29030b54c98b0aee65fbc10ebf7ba36bed98c02c.tar.gz
mpd-29030b54c98b0aee65fbc10ebf7ba36bed98c02c.tar.xz
mpd-29030b54c98b0aee65fbc10ebf7ba36bed98c02c.zip
util/Error: new error passing library
Replaces GLib's GError.
Diffstat (limited to 'src/mixer/OssMixerPlugin.cxx')
-rw-r--r--src/mixer/OssMixerPlugin.cxx72
1 files changed, 29 insertions, 43 deletions
diff --git a/src/mixer/OssMixerPlugin.cxx b/src/mixer/OssMixerPlugin.cxx
index 231f38432..84cd223e6 100644
--- a/src/mixer/OssMixerPlugin.cxx
+++ b/src/mixer/OssMixerPlugin.cxx
@@ -21,6 +21,8 @@
#include "MixerInternal.hxx"
#include "OutputAPI.hxx"
#include "system/fd_util.h"
+#include "util/Error.hxx"
+#include "util/Domain.hxx"
#include <glib.h>
@@ -51,22 +53,15 @@ class OssMixer : public Mixer {
public:
OssMixer():Mixer(oss_mixer_plugin) {}
- bool Configure(const config_param &param, GError **error_r);
- bool Open(GError **error_r);
+ bool Configure(const config_param &param, Error &error);
+ bool Open(Error &error);
void Close();
- int GetVolume(GError **error_r);
- bool SetVolume(unsigned volume, GError **error_r);
+ int GetVolume(Error &error);
+ bool SetVolume(unsigned volume, Error &error);
};
-/**
- * The quark used for GError.domain.
- */
-static inline GQuark
-oss_mixer_quark(void)
-{
- return g_quark_from_static_string("oss_mixer");
-}
+static constexpr Domain oss_mixer_domain("oss_mixer");
static int
oss_find_mixer(const char *name)
@@ -84,17 +79,16 @@ oss_find_mixer(const char *name)
}
inline bool
-OssMixer::Configure(const config_param &param, GError **error_r)
+OssMixer::Configure(const config_param &param, Error &error)
{
- device = param.GetBlockValue("mixer_device",
- VOLUME_MIXER_OSS_DEFAULT);
+ device = param.GetBlockValue("mixer_device", VOLUME_MIXER_OSS_DEFAULT);
control = param.GetBlockValue("mixer_control");
if (control != NULL) {
volume_control = oss_find_mixer(control);
if (volume_control < 0) {
- g_set_error(error_r, oss_mixer_quark(), 0,
- "no such mixer control: %s", control);
+ error.Format(oss_mixer_domain, 0,
+ "no such mixer control: %s", control);
return false;
}
} else
@@ -105,11 +99,11 @@ OssMixer::Configure(const config_param &param, GError **error_r)
static Mixer *
oss_mixer_init(gcc_unused void *ao, const config_param &param,
- GError **error_r)
+ Error &error)
{
OssMixer *om = new OssMixer();
- if (!om->Configure(param, error_r)) {
+ if (!om->Configure(param, error)) {
delete om;
return nullptr;
}
@@ -141,13 +135,11 @@ oss_mixer_close(Mixer *data)
}
inline bool
-OssMixer::Open(GError **error_r)
+OssMixer::Open(Error &error)
{
device_fd = open_cloexec(device, O_RDONLY, 0);
if (device_fd < 0) {
- g_set_error(error_r, oss_mixer_quark(), errno,
- "failed to open %s: %s",
- device, g_strerror(errno));
+ error.FormatErrno("failed to open %s", device);
return false;
}
@@ -155,17 +147,15 @@ OssMixer::Open(GError **error_r)
int devmask = 0;
if (ioctl(device_fd, SOUND_MIXER_READ_DEVMASK, &devmask) < 0) {
- g_set_error(error_r, oss_mixer_quark(), errno,
- "READ_DEVMASK failed: %s",
- g_strerror(errno));
+ error.SetErrno("READ_DEVMASK failed");
Close();
return false;
}
if (((1 << volume_control) & devmask) == 0) {
- g_set_error(error_r, oss_mixer_quark(), 0,
- "mixer control \"%s\" not usable",
- control);
+ error.Format(oss_mixer_domain, 0,
+ "mixer control \"%s\" not usable",
+ control);
Close();
return false;
}
@@ -175,15 +165,15 @@ OssMixer::Open(GError **error_r)
}
static bool
-oss_mixer_open(Mixer *data, GError **error_r)
+oss_mixer_open(Mixer *data, Error &error)
{
OssMixer *om = (OssMixer *) data;
- return om->Open(error_r);
+ return om->Open(error);
}
inline int
-OssMixer::GetVolume(GError **error_r)
+OssMixer::GetVolume(Error &error)
{
int left, right, level;
int ret;
@@ -192,9 +182,7 @@ OssMixer::GetVolume(GError **error_r)
ret = ioctl(device_fd, MIXER_READ(volume_control), &level);
if (ret < 0) {
- g_set_error(error_r, oss_mixer_quark(), errno,
- "failed to read OSS volume: %s",
- g_strerror(errno));
+ error.SetErrno("failed to read OSS volume");
return false;
}
@@ -210,14 +198,14 @@ OssMixer::GetVolume(GError **error_r)
}
static int
-oss_mixer_get_volume(Mixer *mixer, GError **error_r)
+oss_mixer_get_volume(Mixer *mixer, Error &error)
{
OssMixer *om = (OssMixer *)mixer;
- return om->GetVolume(error_r);
+ return om->GetVolume(error);
}
inline bool
-OssMixer::SetVolume(unsigned volume, GError **error_r)
+OssMixer::SetVolume(unsigned volume, Error &error)
{
int level;
int ret;
@@ -229,9 +217,7 @@ OssMixer::SetVolume(unsigned volume, GError **error_r)
ret = ioctl(device_fd, MIXER_WRITE(volume_control), &level);
if (ret < 0) {
- g_set_error(error_r, oss_mixer_quark(), errno,
- "failed to set OSS volume: %s",
- g_strerror(errno));
+ error.SetErrno("failed to set OSS volume");
return false;
}
@@ -239,10 +225,10 @@ OssMixer::SetVolume(unsigned volume, GError **error_r)
}
static bool
-oss_mixer_set_volume(Mixer *mixer, unsigned volume, GError **error_r)
+oss_mixer_set_volume(Mixer *mixer, unsigned volume, Error &error)
{
OssMixer *om = (OssMixer *)mixer;
- return om->SetVolume(volume, error_r);
+ return om->SetVolume(volume, error);
}
const struct mixer_plugin oss_mixer_plugin = {