aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-09-07 13:50:16 +0200
committerMax Kellermann <max@duempel.org>2008-09-07 13:50:16 +0200
commitf7e414d9347aaf2397f883181c8bdb6959380143 (patch)
tree0a8f8553b0cd744a678fecd76e302fb7e63c0ce7
parent8e3c40f032d1c760b9dc11df654c577baaf5f76a (diff)
downloadmpd-f7e414d9347aaf2397f883181c8bdb6959380143.tar.gz
mpd-f7e414d9347aaf2397f883181c8bdb6959380143.tar.xz
mpd-f7e414d9347aaf2397f883181c8bdb6959380143.zip
volume: don't pass "fd" to changeVolumeLevel()
The "volume" library shouldn't talk to the client. Move error handling to command.c.
-rw-r--r--src/command.c20
-rw-r--r--src/volume.c26
-rw-r--r--src/volume.h2
3 files changed, 26 insertions, 22 deletions
diff --git a/src/command.c b/src/command.c
index f197db393..c1422d2c0 100644
--- a/src/command.c
+++ b/src/command.c
@@ -911,21 +911,33 @@ static int handleListAll(int fd, mpd_unused int *permission,
static int handleVolume(int fd, mpd_unused int *permission,
mpd_unused int argc, char *argv[])
{
- int change;
+ int change, ret;
if (check_int(fd, &change, argv[1], need_integer) < 0)
return -1;
- return changeVolumeLevel(fd, change, 1);
+
+ ret = changeVolumeLevel(change, 1);
+ if (ret == -1)
+ commandError(fd, ACK_ERROR_SYSTEM,
+ "problems setting volume");
+
+ return ret;
}
static int handleSetVol(int fd, mpd_unused int *permission,
mpd_unused int argc, char *argv[])
{
- int level;
+ int level, ret;
if (check_int(fd, &level, argv[1], need_integer) < 0)
return -1;
- return changeVolumeLevel(fd, level, 0);
+
+ ret = changeVolumeLevel(level, 0);
+ if (ret == -1)
+ commandError(fd, ACK_ERROR_SYSTEM,
+ "problems setting volume");
+
+ return ret;
}
static int handleRepeat(int fd, mpd_unused int *permission,
diff --git a/src/volume.c b/src/volume.c
index 830b066fe..71fe098ac 100644
--- a/src/volume.c
+++ b/src/volume.c
@@ -17,13 +17,10 @@
*/
#include "volume.h"
-#include "command.h"
#include "conf.h"
#include "log.h"
#include "player_control.h"
-#include "gcc.h"
#include "utils.h"
-#include "ack.h"
#include "os_compat.h"
#include "../config.h"
@@ -169,18 +166,15 @@ static int getOssVolumeLevel(void)
return left;
}
-static int changeOssVolumeLevel(int fd, int change, int rel)
+static int changeOssVolumeLevel(int change, int rel)
{
int current;
int new;
int level;
if (rel) {
- if ((current = getOssVolumeLevel()) < 0) {
- commandError(fd, ACK_ERROR_SYSTEM,
- "problem getting current volume");
+ if ((current = getOssVolumeLevel()) < 0)
return -1;
- }
new = current + change;
} else {
@@ -198,7 +192,6 @@ static int changeOssVolumeLevel(int fd, int change, int rel)
if (ioctl(volume_ossFd, MIXER_WRITE(volume_ossControl), &level) < 0) {
closeOssMixer();
- commandError(fd, ACK_ERROR_SYSTEM, "problems setting volume");
return -1;
}
@@ -328,7 +321,7 @@ static int getAlsaVolumeLevel(void)
return ret;
}
-static int changeAlsaVolumeLevel(int fd, int change, int rel)
+static int changeAlsaVolumeLevel(int change, int rel)
{
float vol;
long level;
@@ -361,7 +354,6 @@ static int changeAlsaVolumeLevel(int fd, int change, int rel)
if ((err =
snd_mixer_selem_set_playback_volume_all(volume_alsaElem,
level)) < 0) {
- commandError(fd, ACK_ERROR_SYSTEM, "problems setting volume");
WARNING("problems setting alsa volume: %s\n",
snd_strerror(err));
closeAlsaMixer();
@@ -469,7 +461,7 @@ int getVolumeLevel(void)
}
}
-static int changeSoftwareVolume(mpd_unused int fd, int change, int rel)
+static int changeSoftwareVolume(int change, int rel)
{
int new = change;
@@ -497,19 +489,19 @@ static int changeSoftwareVolume(mpd_unused int fd, int change, int rel)
return 0;
}
-int changeVolumeLevel(int fd, int change, int rel)
+int changeVolumeLevel(int change, int rel)
{
switch (volume_mixerType) {
#ifdef HAVE_ALSA
case VOLUME_MIXER_TYPE_ALSA:
- return changeAlsaVolumeLevel(fd, change, rel);
+ return changeAlsaVolumeLevel(change, rel);
#endif
#ifdef HAVE_OSS
case VOLUME_MIXER_TYPE_OSS:
- return changeOssVolumeLevel(fd, change, rel);
+ return changeOssVolumeLevel(change, rel);
#endif
case VOLUME_MIXER_TYPE_SOFTWARE:
- return changeSoftwareVolume(fd, change, rel);
+ return changeSoftwareVolume(change, rel);
default:
return 0;
}
@@ -531,7 +523,7 @@ void read_sw_volume_state(FILE *fp)
continue;
sv = strtol(buf + len, &end, 10);
if (mpd_likely(!*end))
- changeSoftwareVolume(STDERR_FILENO, sv, 0);
+ changeSoftwareVolume(sv, 0);
else
ERROR("Can't parse software volume: %s\n", buf);
return;
diff --git a/src/volume.h b/src/volume.h
index 85a9eefa8..a92cdd8bb 100644
--- a/src/volume.h
+++ b/src/volume.h
@@ -33,7 +33,7 @@ void finishVolume(void);
int getVolumeLevel(void);
-int changeVolumeLevel(int fd, int change, int rel);
+int changeVolumeLevel(int change, int rel);
void read_sw_volume_state(FILE *fp);