aboutsummaryrefslogblamecommitdiffstats
path: root/src/player_error.c
blob: 4c7f7b9defd7d6c2beb639e123956717c9bfe8db (plain) (tree)




















































                                                                                
#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;
}