diff options
Diffstat (limited to '')
-rw-r--r-- | src/player_error.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/player_error.c b/src/player_error.c new file mode 100644 index 000000000..4c7f7b9de --- /dev/null +++ b/src/player_error.c @@ -0,0 +1,53 @@ +#include "player_error.h" +#include "os_compat.h" +#include "log.h" +#include "path.h" + +enum player_error player_errno; +Song *player_errsong; + +void player_clearerror(void) +{ + player_errno = PLAYER_ERROR_NONE; + player_errsong = NULL; +} + +void player_seterror(enum player_error err, Song *song) +{ + if (player_errno) + ERROR("Clobbering existing error: %s\n", player_strerror()); + player_errno = err; + player_errsong = song; +} + +const char *player_strerror(void) +{ + /* static OK here, only one user in main task */ + static char error[MPD_PATH_MAX + 64]; /* still too much */ + char path_max_tmp[MPD_PATH_MAX]; + *error = '\0'; /* likely */ + + switch (player_errno) { + case PLAYER_ERROR_NONE: break; + case PLAYER_ERROR_FILE: + snprintf(error, sizeof(error), "problems decoding \"%s\"", + get_song_url(path_max_tmp, player_errsong)); + break; + case PLAYER_ERROR_AUDIO: + strcpy(error, "problems opening audio device"); + break; + case PLAYER_ERROR_SYSTEM: + strcpy(error, "system error occured"); + break; + case PLAYER_ERROR_UNKTYPE: + snprintf(error, sizeof(error), "file type of \"%s\" is unknown", + get_song_url(path_max_tmp, player_errsong)); + case PLAYER_ERROR_FILENOTFOUND: + snprintf(error, sizeof(error), + "file \"%s\" does not exist or is inaccessible", + get_song_url(path_max_tmp, player_errsong)); + break; + } + return *error ? error : NULL; +} + |