From 8a7e07af285d4e4c7be4086b1da25661b3ec9007 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Mon, 9 Nov 2020 20:27:42 +0100 Subject: [PATCH] =?UTF-8?q?module/mpd:=20don=E2=80=99t=20overload=20enum?= =?UTF-8?q?=20mpd=5Fstate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We overloaded enum mpd_state to add an “offline” state. Don’t do this. We can detect the offline state by checking if our connection object is NULL. Closes #16 --- CHANGELOG.md | 2 ++ modules/mpd.c | 31 ++++++++++++++----------------- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a8be77b..fa81d03 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,8 @@ * Memory leak when a YAML parsing error was encountered. * clock: update every second when necessary (https://codeberg.org/dnkl/yambar/issues/12). +* mpd: fix compilation with clang + (https://codeberg.org/dnkl/yambar/issues/16). ### Security diff --git a/modules/mpd.c b/modules/mpd.c index 743dc2e..f6ae445 100644 --- a/modules/mpd.c +++ b/modules/mpd.c @@ -27,13 +27,6 @@ #include "../config-verify.h" #include "../plugin.h" -enum state { - STATE_OFFLINE = 1000, - STATE_STOP = MPD_STATE_STOP, - STATE_PAUSE = MPD_STATE_PAUSE, - STATE_PLAY = MPD_STATE_PLAY, -}; - struct private { char *host; uint16_t port; @@ -41,7 +34,7 @@ struct private { struct mpd_connection *conn; - enum state state; + enum mpd_state state; bool repeat; bool random; bool consume; @@ -127,7 +120,7 @@ content(struct module *mod) /* Calculate what 'elapsed' is now */ uint64_t elapsed = m->elapsed.value; - if (m->state == STATE_PLAY) { + if (m->state == MPD_STATE_PLAY) { elapsed += timespec_diff_milli_seconds(&now, &m->elapsed.when); if (elapsed > m->duration) { LOG_DBG( @@ -148,15 +141,19 @@ content(struct module *mod) /* State as string */ const char *state_str = NULL; - switch (m->state) { - case STATE_OFFLINE: state_str = "offline"; break; - case STATE_STOP: state_str = "stopped"; break; - case STATE_PAUSE: state_str = "paused"; break; - case STATE_PLAY: state_str = "playing"; break; + if (m->conn == NULL) + state_str = "offline"; + else { + switch (m->state) { + case MPD_STATE_UNKNOWN: state_str = "unknown"; break; + case MPD_STATE_STOP: state_str = "stopped"; break; + case MPD_STATE_PAUSE: state_str = "paused"; break; + case MPD_STATE_PLAY: state_str = "playing"; break; + } } /* Tell particle to real-time track? */ - enum tag_realtime_unit realtime = m->state == STATE_PLAY + enum tag_realtime_unit realtime = m->state == MPD_STATE_PLAY ? TAG_REALTIME_MSECS : TAG_REALTIME_NONE; struct tag_set tags = { @@ -384,7 +381,7 @@ run(struct module *mod) free(m->album); m->album = NULL; free(m->artist); m->artist = NULL; free(m->title); m->title = NULL; - m->state = STATE_OFFLINE; + m->state = MPD_STATE_UNKNOWN; m->elapsed.value = m->duration = 0; m->elapsed.when.tv_sec = m->elapsed.when.tv_nsec = 0; mtx_unlock(&mod->lock); @@ -579,7 +576,7 @@ mpd_new(const char *host, uint16_t port, struct particle *label) priv->host = strdup(host); priv->port = port; priv->label = label; - priv->state = STATE_OFFLINE; + priv->state = MPD_STATE_UNKNOWN; priv->refresh_abort_fd = -1; struct module *mod = module_common_new();