diff options
author | Max Kellermann <max@duempel.org> | 2008-09-07 13:38:59 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2008-09-07 13:38:59 +0200 |
commit | e1bf96672e8ef46b4ed20eba2c91efa048c4789c (patch) | |
tree | 22fd5495c789d974e0ffff385248528cb1e682f6 | |
parent | d1df71ebbcb23456ca5985dea9cb06e2453f903e (diff) | |
download | mpd-e1bf96672e8ef46b4ed20eba2c91efa048c4789c.tar.gz mpd-e1bf96672e8ef46b4ed20eba2c91efa048c4789c.tar.xz mpd-e1bf96672e8ef46b4ed20eba2c91efa048c4789c.zip |
playlist: moved "repeat" and "random" value checks to command.c
Client's input values should be validated by the command
implementation, and the core libraries shouldn't talk to the client
directly if possible. Thus, setPlaylistRepeatStatus() and
setPlaylistRandomStatus() don't get the file descriptor, and cannot
fail (return void).
-rw-r--r-- | src/command.c | 20 | ||||
-rw-r--r-- | src/playlist.c | 26 | ||||
-rw-r--r-- | src/playlist.h | 4 |
3 files changed, 26 insertions, 24 deletions
diff --git a/src/command.c b/src/command.c index 3e03c50b9..63ff03e96 100644 --- a/src/command.c +++ b/src/command.c @@ -773,7 +773,15 @@ static int handleRepeat(int fd, mpd_unused int *permission, if (check_int(fd, &status, argv[1], need_integer) < 0) return -1; - return setPlaylistRepeatStatus(fd, status); + + if (status != 0 && status != 1) { + commandError(fd, ACK_ERROR_ARG, + "\"%i\" is not 0 or 1", status); + return -1; + } + + setPlaylistRepeatStatus(status); + return 0; } static int handleRandom(int fd, mpd_unused int *permission, @@ -783,7 +791,15 @@ static int handleRandom(int fd, mpd_unused int *permission, if (check_int(fd, &status, argv[1], need_integer) < 0) return -1; - return setPlaylistRandomStatus(fd, status); + + if (status != 0 && status != 1) { + commandError(fd, ACK_ERROR_ARG, + "\"%i\" is not 0 or 1", status); + return -1; + } + + setPlaylistRandomStatus(status); + return 0; } static int handleStats(int fd, mpd_unused int *permission, diff --git a/src/playlist.c b/src/playlist.c index 3c41b4d79..06df43fc3 100644 --- a/src/playlist.c +++ b/src/playlist.c @@ -327,9 +327,9 @@ void readPlaylistState(FILE *fp) if (strcmp (&(buffer[strlen(PLAYLIST_STATE_FILE_REPEAT)]), "1") == 0) { - setPlaylistRepeatStatus(STDERR_FILENO, 1); + setPlaylistRepeatStatus(1); } else - setPlaylistRepeatStatus(STDERR_FILENO, 0); + setPlaylistRepeatStatus(0); } else if (strncmp (buffer, PLAYLIST_STATE_FILE_CROSSFADE, @@ -348,9 +348,9 @@ void readPlaylistState(FILE *fp) (buffer [strlen(PLAYLIST_STATE_FILE_RANDOM)]), "1") == 0) { - setPlaylistRandomStatus(STDERR_FILENO, 1); + setPlaylistRandomStatus(1); } else - setPlaylistRandomStatus(STDERR_FILENO, 0); + setPlaylistRandomStatus(0); } else if (strncmp(buffer, PLAYLIST_STATE_FILE_CURRENT, strlen(PLAYLIST_STATE_FILE_CURRENT)) == 0) { @@ -1012,21 +1012,14 @@ int getPlaylistRandomStatus(void) return playlist.random; } -int setPlaylistRepeatStatus(int fd, int status) +void setPlaylistRepeatStatus(int status) { - if (status != 0 && status != 1) { - commandError(fd, ACK_ERROR_ARG, "\"%i\" is not 0 or 1", status); - return -1; - } - if (playlist_state == PLAYLIST_STATE_PLAY) { if (playlist.repeat && !status && playlist.queued == 0) clearPlayerQueue(); } playlist.repeat = status; - - return 0; } int moveSongInPlaylist(int fd, int from, int to) @@ -1183,15 +1176,10 @@ static void randomizeOrder(int start, int end) } } -int setPlaylistRandomStatus(int fd, int status) +void setPlaylistRandomStatus(int status) { int statusWas = playlist.random; - if (status != 0 && status != 1) { - commandError(fd, ACK_ERROR_ARG, "\"%i\" is not 0 or 1", status); - return -1; - } - playlist.random = status; if (status != statusWas) { @@ -1209,8 +1197,6 @@ int setPlaylistRandomStatus(int fd, int status) } else orderPlaylist(); } - - return 0; } void previousSongInPlaylist(void) diff --git a/src/playlist.h b/src/playlist.h index 92378eeb2..9ef91e3e0 100644 --- a/src/playlist.h +++ b/src/playlist.h @@ -105,11 +105,11 @@ int loadPlaylist(int fd, const char *utf8file); int getPlaylistRepeatStatus(void); -int setPlaylistRepeatStatus(int fd, int status); +void setPlaylistRepeatStatus(int status); int getPlaylistRandomStatus(void); -int setPlaylistRandomStatus(int fd, int status); +void setPlaylistRandomStatus(int status); int getPlaylistCurrentSong(void); |