From 6a5885c7a3ede1cdf6c0d97e528dd280311a25b2 Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Mon, 4 May 2020 19:14:28 +0200
Subject: [PATCH] Use a macro for string comparaison, use the same comparaison
 for all the program

---
 inc/common/macro.h    |   3 ++
 src/commands.c        |  38 ++++++++--------
 src/database/update.c |   4 +-
 src/main/lkt.c        |  14 +++---
 src/mkv/mkv.c         |  13 +++---
 src/mkv/write.c       |  11 +++--
 src/module/mpv.c      |   9 ++--
 src/net/listen.c      | 103 +++++++++++++++++++++---------------------
 8 files changed, 100 insertions(+), 95 deletions(-)

diff --git a/inc/common/macro.h b/inc/common/macro.h
index cc89cf24..cb3393ec 100644
--- a/inc/common/macro.h
+++ b/inc/common/macro.h
@@ -169,3 +169,6 @@ typedef volatile enum {
 
 #define SQLITE_DO_ROLLBACK(db)                                          \
     sqlite3_exec((sqlite3 *) db, "ROLLBACK TRANSACTION;\n", NULL, NULL, NULL);
+
+#define STR_MATCH(str1, str2)           (! strcasecmp(str1, str2))
+#define STR_NMATCH(str1, str2, n)       (! strncasecmp(str1, str2, n))
diff --git a/src/commands.c b/src/commands.c
index b205df41..1b18a65a 100644
--- a/src/commands.c
+++ b/src/commands.c
@@ -329,29 +329,29 @@ command_idle(struct lkt_state *srv, size_t c, struct lkt_command *cmd)
     for (size_t i = 0; cmd->args[i]; ++i) {
         once |= true;
 
-        if (strcmp(cmd->args[i], "database") == 0)
+        if (STR_MATCH(cmd->args[i], "database"))
             *clt_mask |= MPD_IDLE_DATABASE;
-        else if (strcmp(cmd->args[i], "update") == 0)
+        else if (STR_MATCH(cmd->args[i], "update"))
             *clt_mask |= MPD_IDLE_UPDATE;
-        else if (strcmp(cmd->args[i], "stored_playlist") == 0)
+        else if (STR_MATCH(cmd->args[i], "stored_playlist"))
             *clt_mask |= MPD_IDLE_STORED_PLAYLIST;
-        else if (strcmp(cmd->args[i], "playlist") == 0)
+        else if (STR_MATCH(cmd->args[i], "playlist"))
             *clt_mask |= MPD_IDLE_PLAYLIST;
-        else if (strcmp(cmd->args[i], "player") == 0)
+        else if (STR_MATCH(cmd->args[i], "player"))
             *clt_mask |= MPD_IDLE_PLAYER;
-        else if (strcmp(cmd->args[i], "mixer") == 0)
+        else if (STR_MATCH(cmd->args[i], "mixer"))
             *clt_mask |= MPD_IDLE_MIXER;
-        else if (strcmp(cmd->args[i], "output") == 0)
+        else if (STR_MATCH(cmd->args[i], "output"))
             *clt_mask |= MPD_IDLE_OUTPUT;
-        else if (strcmp(cmd->args[i], "options") == 0)
+        else if (STR_MATCH(cmd->args[i], "options"))
             *clt_mask |= MPD_IDLE_OPTIONS;
-        else if (strcmp(cmd->args[i], "partition") == 0)
+        else if (STR_MATCH(cmd->args[i], "partition"))
             *clt_mask |= MPD_IDLE_PARTITION;
-        else if (strcmp(cmd->args[i], "sticker") == 0)
+        else if (STR_MATCH(cmd->args[i], "sticker"))
             *clt_mask |= MPD_IDLE_STICKER;
-        else if (strcmp(cmd->args[i], "subscription") == 0)
+        else if (STR_MATCH(cmd->args[i], "subscription"))
             *clt_mask |= MPD_IDLE_SUBSCRIPTION;
-        else if (strcmp(cmd->args[i], "message") == 0)
+        else if (STR_MATCH(cmd->args[i], "message"))
             *clt_mask |= MPD_IDLE_MESSAGE;
         else
             *clt_mask = MPD_IDLE_ALL;
@@ -414,23 +414,23 @@ command_find(struct lkt_state *srv, size_t c, char *cmd_args[LKT_MESSAGE_ARGS_MA
 
     /* Select the right column */
     mpd_tag = cmd_args[0];
-    if (!strcasecmp("any", mpd_tag) || !strcasecmp("all", mpd_tag) || !strcasecmp("query", mpd_tag) ||
-        !strcasecmp("source", mpd_tag) || !strcasecmp("title", mpd_tag))
+    if (STR_MATCH("any", mpd_tag) || STR_MATCH("all", mpd_tag) || STR_MATCH("query", mpd_tag) ||
+        STR_MATCH("source", mpd_tag) || STR_MATCH("title", mpd_tag))
         search.name = LKT_DATABASE_KARA_COLUMNT_ANY;
 
-    else if (!strcasecmp("author", mpd_tag))
+    else if (STR_MATCH("author", mpd_tag))
         search.name = LKT_DATABASE_NAME_KAUTHOR;
 
-    else if (!strcasecmp("category", mpd_tag) || !strcasecmp("cat", mpd_tag))
+    else if (STR_MATCH("category", mpd_tag) || STR_MATCH("cat", mpd_tag))
         search.name = LKT_DATABASE_NAME_KCAT;
 
-    else if (!strcasecmp("type", mpd_tag))
+    else if (STR_MATCH("type", mpd_tag))
         search.name = LKT_DATABASE_NAME_KTYPE;
 
-    else if (!strcasecmp("language", mpd_tag) || !strcasecmp("lang", mpd_tag))
+    else if (STR_MATCH("language", mpd_tag) || STR_MATCH("lang", mpd_tag))
         search.name = LKT_DATABASE_NAME_KLANG;
 
-    else if (!strcasecmp("id", mpd_tag))
+    else if (STR_MATCH("id", mpd_tag))
         search.name = LKT_DATABASE_NAME_KID;
 
     else
diff --git a/src/database/update.c b/src/database/update.c
index cacb7bad..9f5e840e 100644
--- a/src/database/update.c
+++ b/src/database/update.c
@@ -146,8 +146,8 @@ database_update(volatile sqlite3 *db, const char *kara_dir)
         }
 
         else if (dir->d_type == DT_DIR          &&
-                 strcmp(dir->d_name, ".")  != 0 &&
-                 strcmp(dir->d_name, "..") != 0)
+                 !STR_MATCH(dir->d_name, ".")   &&
+                 !STR_MATCH(dir->d_name, ".."))
             database_update(db, path);
     }
 
diff --git a/src/main/lkt.c b/src/main/lkt.c
index 4c69449b..5494caa6 100644
--- a/src/main/lkt.c
+++ b/src/main/lkt.c
@@ -26,8 +26,6 @@
 #include <limits.h>
 
 #define LKT_KEY_VALUE_SEP               ": \n\t\0"
-#define STR_MATCH(str1, str2)           (! strcasecmp(str1, str2))
-#define STR_NMATCH(str1, str2, n)       (! strncasecmp(str1, str2, n))
 #define fail_if(cond, msg)              { if (cond) { LOG_ERROR("%s", msg); exit(EXIT_FAILURE); } }
 #define fail(msg)                       { LOG_ERROR("%s", msg); exit(EXIT_FAILURE); }
 #define lkt_send_and_exit(buffer, len)  exit(write_socket(lkt_connect(), buffer, len))
@@ -299,7 +297,7 @@ ping__(struct lkt_cmd_args *args)
         fail("Failed to send the ping to lektord");
     if (read_socket(sock, buff, 6 * sizeof(char)) <= 0)
         fail("Failed to recieve the response of lektord");
-    if (strncmp(buff, "OK", 2))
+    if (!STR_NMATCH(buff, "OK", 2))
         fail("ACK");
     write(1, "OK\n", sizeof("OK\n"));
     exit(EXIT_SUCCESS);
@@ -388,7 +386,7 @@ queue_pop__(struct lkt_cmd_args *args)
     if (write_socket(sock, "status\n", sizeof("status\n")))
         goto error;
 
-#define assign_int(str, var) if (! strncmp(buff, str, len)) { var = (atoi(lkt_skip_key(buff))); continue; }
+#define assign_int(str, var) if (STR_NMATCH(buff, str, len)) { var = (atoi(lkt_skip_key(buff))); continue; }
     for (;;) {
         memset(buff, 0, LKT_MESSAGE_MAX * sizeof(char));
         if (read_socket(sock, buff, LKT_MESSAGE_MAX - 1) <= 0)
@@ -448,8 +446,8 @@ status__(struct lkt_cmd_args *args)
 
         if (STR_NMATCH(buff, "state", len)) {
             char *it = lkt_skip_key(buff);
-            play = ! strncmp(it, "play", 4);
-            stopped = ! strncmp(it, "stop", 4);
+            play = STR_NMATCH(it, "play", 4);
+            stopped = STR_NMATCH(it, "stop", 4);
             continue;
         }
 
@@ -601,7 +599,7 @@ redo:
         memset(buff, 0, LKT_MESSAGE_MAX * sizeof(char));
         assert(read_socket(sock, buff, LKT_MESSAGE_MAX - 1) > 0);
 
-        if (! strncmp(buff, "continue:", strlen("continue:"))) {
+        if (STR_NMATCH(buff, "continue:", strlen("continue:"))) {
             continuation = atoi(lkt_skip_key(buff));
             if (continuation > 0) {
                 fclose(sock);
@@ -646,7 +644,7 @@ queue_list__(struct lkt_cmd_args *args)
     if (write_socket(sock, "status\n", sizeof("status\n")))
         fail("Communication error");
 
-#define assign_int(str, var) if (! strncmp(buff, str, len)) { var = (atoi(lkt_skip_key(buff))); continue; }
+#define assign_int(str, var) if (STR_NMATCH(buff, str, len)) { var = (atoi(lkt_skip_key(buff))); continue; }
     for (;;) {
         memset(buff, 0, LKT_MESSAGE_MAX * sizeof(char));
         if (read_socket(sock, buff, LKT_MESSAGE_MAX - 1) <= 0)
diff --git a/src/mkv/mkv.c b/src/mkv/mkv.c
index a62d536f..fe1b6fff 100644
--- a/src/mkv/mkv.c
+++ b/src/mkv/mkv.c
@@ -5,6 +5,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <strings.h>
 #include <unistd.h>
 
 #include <lektor/bufferfd.h>
@@ -431,20 +432,20 @@ static void
 kara_add_simple_tag(struct kara_metadata *dst, struct mkv_simple_tag *t,
                     uint64_t target_type_value)
 {
-    if (!strcmp("TITLE", t->name)) {
+    if (STR_MATCH("TITLE", t->name)) {
         if (target_type_value == 50)
             strncpy(dst->song_name, t->value, LEKTOR_TAG_MAX - 1);
         else if (target_type_value == 70)
             strncpy(dst->source_name, t->value, LEKTOR_TAG_MAX - 1);
-    } else if (!strcmp("CONTENT_TYPE", t->name))
+    } else if (STR_MATCH("CONTENT_TYPE", t->name))
         strncpy(dst->category, t->value, LEKTOR_TAG_MAX - 1);
-    else if (!strcmp("ADDRESS", t->name))
+    else if (STR_MATCH("ADDRESS", t->name))
         strncpy(dst->language, t->value, LEKTOR_TAG_MAX - 1);
-    else if (!strcmp("ARTIST", t->name))
+    else if (STR_MATCH("ARTIST", t->name))
         strncpy(dst->author_name, t->value, LEKTOR_TAG_MAX - 1);
-    else if (!strcmp("GENRE", t->name))
+    else if (STR_MATCH("GENRE", t->name))
         strncpy(dst->song_type, t->value, LEKTOR_TAG_MAX - 1);
-    else if (!strcmp("TRACK", t->name))
+    else if (STR_MATCH("TRACK", t->name))
         dst->song_number = (int) strtol(t->value, NULL, 10);
 }
 
diff --git a/src/mkv/write.c b/src/mkv/write.c
index c5caa8c0..d366c6bf 100644
--- a/src/mkv/write.c
+++ b/src/mkv/write.c
@@ -3,6 +3,7 @@
 
 #include <common/common.h>
 #include <lektor/mkv.h>
+#include <strings.h>
 #include <stdbool.h>
 #include <stdio.h>
 #include <unistd.h>
@@ -204,13 +205,13 @@ metadata_set_directory(const char *kara_dir, const char *mkvpropedit)
         strncat(path, "/", PATH_MAX - 1);
         strncat(path, dir->d_name, PATH_MAX - 1);
 
-        if (dir->d_type == DT_REG &&
-            metadata_from_path(path, &meta) &&
+        if (dir->d_type == DT_REG               &&
+            metadata_from_path(path, &meta)     &&
             kara_metadata_write(&meta, path, mkvpropedit))
             continue;
-        else if (dir->d_type == DT_DIR &&
-                 strcmp(dir->d_name, ".") != 0 &&
-                 strcmp(dir->d_name, "..") != 0)
+        else if (dir->d_type == DT_DIR          &&
+                 !STR_MATCH(dir->d_name, ".")   &&
+                 !STR_MATCH(dir->d_name, ".."))
             metadata_set_directory(path, mkvpropedit);
     }
 
diff --git a/src/module/mpv.c b/src/module/mpv.c
index b29d7153..30c8d5a7 100644
--- a/src/module/mpv.c
+++ b/src/module/mpv.c
@@ -4,6 +4,7 @@
 #include <lektor/module/mpv.h>
 #include <lektor/commands.h>
 #include <lektor/database.h>
+#include <strings.h>
 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
@@ -162,24 +163,24 @@ loop:
         if (prop->format == MPV_FORMAT_NONE)
             break;
         // MPV volume (BUG: The flag is not MPV_FORMAT_NONE only at the end of the song...) //
-        if (!strcmp(prop->name, "ao-volume")
+        if (STR_MATCH(prop->name, "ao-volume")
             && prop->format == MPV_FORMAT_INT64) {
             ao_volume = *(int *) prop->data;
             database_config_queue(db, "volume", ao_volume);
         }
         // File duration //
-        if (!strcmp(prop->name, "duration")
+        if (STR_MATCH(prop->name, "duration")
             && prop->format == MPV_FORMAT_INT64) {
             *time_duration = *(int *) prop->data;
             database_config_queue(db, "duration", *(int *) prop->data);
         }
-        if (!strcmp(prop->name, "time-pos")
+        if (STR_MATCH(prop->name, "time-pos")
             && prop->format == MPV_FORMAT_INT64) {
             *time_pos = *(int *) prop->data;
             database_config_queue(db, "elapsed", *(int *) prop->data);
         }
         // Pause state //
-        if (!strcmp(prop->name, "pause")
+        if (STR_MATCH(prop->name, "pause")
             && prop->format == MPV_FORMAT_FLAG)
             database_queue_set_paused(db, *(bool *) prop->data);
         break;
diff --git a/src/net/listen.c b/src/net/listen.c
index 0aa570f4..2e6da642 100644
--- a/src/net/listen.c
+++ b/src/net/listen.c
@@ -7,6 +7,7 @@
 
 #include <sqlite3.h>
 
+#include <strings.h>
 #include <sched.h>
 #include <assert.h>
 #include <arpa/inet.h>
@@ -151,111 +152,111 @@ handle_simple_command(struct lkt_state *srv, size_t c, struct lkt_command cmd)
     switch (*lkt_client_get_mask(srv, c)) {
     case MPD_IDLE_NONE:
         /* Commands that requires authentification. */
-        if (!strcmp(cmd.name, "__adduser"))
+        if (STR_MATCH(cmd.name, "__adduser"))
             err = ! command_user_add(srv, c, (sqlite3 *) srv->db, cmd.args);
-        else if (!strcmp(cmd.name, "__restart"))
+        else if (STR_MATCH(cmd.name, "__restart"))
             err = ! command_restart(srv, c);
-        else if (!strcmp(cmd.name, "kill"))
+        else if (STR_MATCH(cmd.name, "kill"))
             err = ! command_kill(srv, c);
-        else if (!strcmp(cmd.name, "update"))
+        else if (STR_MATCH(cmd.name, "update"))
             err = ! command_update(srv, c, cmd.args);
-        else if (!strcmp(cmd.name, "rescan"))
+        else if (STR_MATCH(cmd.name, "rescan"))
             err = ! command_rescan(srv, c, cmd.args);
 
         /* Commands that are available if not in idle mode */
-        else if (!strcmp(cmd.name, "currentsong"))
+        else if (STR_MATCH(cmd.name, "currentsong"))
             err = !command_currentsong(srv, c);
-        else if (!strcmp(cmd.name, "status"))
+        else if (STR_MATCH(cmd.name, "status"))
             err = !command_status(srv, c);
 
-        else if (!strcmp(cmd.name, "close"))
+        else if (STR_MATCH(cmd.name, "close"))
             err = !lkt_close_client(srv, c);
-        else if (!strcmp(cmd.name, "ping"))
+        else if (STR_MATCH(cmd.name, "ping"))
             err = 0;
 
-        else if (!strcmp(cmd.name, "next"))
+        else if (STR_MATCH(cmd.name, "next"))
             err = !command_next((sqlite3 *) srv->db, &srv->win, &srv->mpd_idle_events);
-        else if (!strcmp(cmd.name, "pause"))
+        else if (STR_MATCH(cmd.name, "pause"))
             err = !command_pause((sqlite3 *) srv->db, &srv->win, &srv->mpd_idle_events);
-        else if (!strcmp(cmd.name, "previous"))
+        else if (STR_MATCH(cmd.name, "previous"))
             err = !command_previous((sqlite3 *) srv->db, &srv->win, &srv->mpd_idle_events);
-        else if (!strcmp(cmd.name, "play"))
+        else if (STR_MATCH(cmd.name, "play"))
             err = ! command_play((sqlite3 *) srv->db, &srv->win, cmd.args, &srv->mpd_idle_events);
-        else if (!strcmp(cmd.name, "playid"))
+        else if (STR_MATCH(cmd.name, "playid"))
             err = ! command_playid((sqlite3 *) srv->db, &srv->win, cmd.args, &srv->mpd_idle_events);
-        else if (!strcmp(cmd.name, "stop"))
+        else if (STR_MATCH(cmd.name, "stop"))
             err = !command_stop((sqlite3 *) srv->db, &srv->win, &srv->mpd_idle_events);
-        else if (!strcmp(cmd.name, "clear"))
+        else if (STR_MATCH(cmd.name, "clear"))
             err = !command_clear((sqlite3 *) srv->db, &srv->mpd_idle_events);
-        else if (!strcmp(cmd.name, "crop"))
+        else if (STR_MATCH(cmd.name, "crop"))
             err = !command_crop((sqlite3 *) srv->db, &srv->mpd_idle_events);
-        else if (!strcmp(cmd.name, "moveid"))
+        else if (STR_MATCH(cmd.name, "moveid"))
             err = !command_move((sqlite3 *) srv->db, cmd.args, &srv->mpd_idle_events);
-        else if (!strcmp(cmd.name, "shuffle"))
+        else if (STR_MATCH(cmd.name, "shuffle"))
             err = !command_shuffle((sqlite3 *) srv->db, &srv->mpd_idle_events);
 
-        else if (!strcmp(cmd.name, "playlist") || !strcmp(cmd.name, "playlistinfo"))
+        else if (STR_MATCH(cmd.name, "playlist") || STR_MATCH(cmd.name, "playlistinfo"))
             err = !command_queue_list(srv, c, cmd.args);
-        else if (!strcmp(cmd.name, "playlistfind") || !strcmp(cmd.name, "playlistsearch"))
+        else if (STR_MATCH(cmd.name, "playlistfind") || STR_MATCH(cmd.name, "playlistsearch"))
             err = ! command_find(srv, c, cmd.args, cmd.cont, database_search_queue_init);
 
-        else if (!strcmp(cmd.name, "sticker") && cmd.args[0]) {
-            if (!strcmp(cmd.args[0], "get"))
+        else if (STR_MATCH(cmd.name, "sticker") && cmd.args[0]) {
+            if (STR_MATCH(cmd.args[0], "get"))
                 err = ! command_sticker_get(srv, c, &cmd.args[1]);
-            else if (!strcmp(cmd.args[0], "set"))
+            else if (STR_MATCH(cmd.args[0], "set"))
                 err = ! command_sticker_set(srv, c, &cmd.args[1]);
-            else if (!strcmp(cmd.args[0], "delete"))
+            else if (STR_MATCH(cmd.args[0], "delete"))
                 err = ! command_sticker_delete(srv, c, &cmd.args[1]);
-            else if (!strcmp(cmd.args[0], "list") || !strcmp(cmd.args[0], "find"))
+            else if (STR_MATCH(cmd.args[0], "list") || STR_MATCH(cmd.args[0], "find"))
                 err = ! command_sticker_delete(srv, c, &cmd.args[1]);
         }
 
-        else if (!strcmp(cmd.name, "help"))
+        else if (STR_MATCH(cmd.name, "help"))
             err = !command_help(srv, c);
 
-        else if (!strcmp(cmd.name, "__insert"))
+        else if (STR_MATCH(cmd.name, "__insert"))
             err = !command_add((sqlite3 *) srv->db, &srv->win, cmd.args, &srv->mpd_idle_events, 5);
-        else if (!strcmp(cmd.name, "searchadd") || !strcmp(cmd.name, "findadd") || !strcmp(cmd.name, "add"))
+        else if (STR_MATCH(cmd.name, "searchadd") || STR_MATCH(cmd.name, "findadd") || STR_MATCH(cmd.name, "add"))
             err = !command_add((sqlite3 *) srv->db, &srv->win, cmd.args, &srv->mpd_idle_events, 1);
-        else if (!strcmp(cmd.name, "addid"))
+        else if (STR_MATCH(cmd.name, "addid"))
             err = !command_addid((sqlite3 *) srv->db, &srv->win, cmd.args, &srv->mpd_idle_events);
-        else if (!strcmp(cmd.name, "deleteid"))
+        else if (STR_MATCH(cmd.name, "deleteid"))
             err = ! (cmd.args[0] != NULL &&
                      command_delid((sqlite3 *) srv->db, &srv->win, cmd.args[0], &srv->mpd_idle_events));
 
-        else if (!strcmp(cmd.name, "playlistclear"))
+        else if (STR_MATCH(cmd.name, "playlistclear"))
             err = ! command_plt_clear((sqlite3 *) srv->db, cmd.args, &srv->mpd_idle_events);
-        else if (!strcmp(cmd.name, "rename"))
+        else if (STR_MATCH(cmd.name, "rename"))
             err = ! command_plt_rename((sqlite3 * ) srv->db, cmd.args, &srv->mpd_idle_events);
-        else if (!strcmp(cmd.name, "playlistdelete"))
+        else if (STR_MATCH(cmd.name, "playlistdelete"))
             err = ! command_plt_remove((sqlite3 *) srv->db, cmd.args, &srv->mpd_idle_events);
-        else if (!strcmp(cmd.name, "playlistadd"))
+        else if (STR_MATCH(cmd.name, "playlistadd"))
             err = ! command_plt_add((sqlite3 *) srv->db, cmd.args, &srv->mpd_idle_events);
-        else if (!strcmp(cmd.name, "rm") && cmd.args[0] != NULL && cmd.args[1] == NULL)
+        else if (STR_MATCH(cmd.name, "rm") && cmd.args[0] != NULL && cmd.args[1] == NULL)
             err = ! command_plt_remove((sqlite3 *) srv->db, cmd.args, &srv->mpd_idle_events);
-        else if (!strcmp(cmd.name, "save"))
+        else if (STR_MATCH(cmd.name, "save"))
             err = ! command_plt_export((sqlite3 *) srv->db, cmd.args, &srv->mpd_idle_events);
-        else if (!strcmp(cmd.name, "__import"))
+        else if (STR_MATCH(cmd.name, "__import"))
             err = ! command_plt_import((sqlite3 *) srv->db, cmd.args, &srv->mpd_idle_events);
 
-        else if (!strcmp(cmd.name, "random"))
+        else if (STR_MATCH(cmd.name, "random"))
             err = !command_set_playback_option(srv, c, lkt_playback_option_random, cmd.args);
-        else if (!strcmp(cmd.name, "repeat"))
+        else if (STR_MATCH(cmd.name, "repeat"))
             err = !command_set_playback_option(srv, c, lkt_playback_option_repeat, cmd.args);
-        else if (!strcmp(cmd.name, "setvol"))
+        else if (STR_MATCH(cmd.name, "setvol"))
             err = !command_set_playback_option(srv, c, lkt_playback_option_volume, cmd.args);
-        else if (!strcmp(cmd.name, "single"))
+        else if (STR_MATCH(cmd.name, "single"))
             err = !command_set_playback_option(srv, c, lkt_playback_option_single, cmd.args);
-        else if (!strcmp(cmd.name, "consume"))
+        else if (STR_MATCH(cmd.name, "consume"))
             err = !command_set_playback_option(srv, c, lkt_playback_option_consume, cmd.args);
 
-        else if (!strcmp(cmd.name, "password"))
+        else if (STR_MATCH(cmd.name, "password"))
             err = !command_password(srv, c, cmd.args);
 
-        else if (!strcmp(cmd.name, "idle")) {
+        else if (STR_MATCH(cmd.name, "idle")) {
             err = !command_idle(srv, c, &cmd);
             goto end_no_send_status;
-        } else if (!strcmp(cmd.name, "search") || !strcmp(cmd.name, "find"))
+        } else if (STR_MATCH(cmd.name, "search") || STR_MATCH(cmd.name, "find"))
             err = ! command_find(srv, c, cmd.args, cmd.cont, database_search_database_init);
         else
             err = 2;
@@ -264,10 +265,10 @@ handle_simple_command(struct lkt_state *srv, size_t c, struct lkt_command cmd)
 
     default:
         /* commands available only in idle mode */
-        if (!strcmp(cmd.name, "idle")) {
+        if (STR_MATCH(cmd.name, "idle")) {
             err = !command_idle(srv, c, &cmd);
             goto end_no_send_status;
-        } else if (!strcmp(cmd.name, "noidle"))
+        } else if (STR_MATCH(cmd.name, "noidle"))
             err = !command_noidle(srv, c);
         else
             err = 2;
@@ -314,11 +315,11 @@ handle_command(struct lkt_state *srv, size_t i, struct lkt_command cmd)
     struct lkt_client *cli = &srv->clients[i - 1];
     int err = 0;
 
-    if (!strcmp(cmd.name, "command_list_begin"))
+    if (STR_MATCH(cmd.name, "command_list_begin"))
         err = command_list_begin(srv, i, 0);
-    else if (!strcmp(cmd.name, "command_list_ok_begin"))
+    else if (STR_MATCH(cmd.name, "command_list_ok_begin"))
         err = command_list_begin(srv, i, 1);
-    else if (!strcmp(cmd.name, "command_list_end"))
+    else if (STR_MATCH(cmd.name, "command_list_end"))
         err = command_list_end(srv, i);
     else if (cli->command_list_mode != LKT_COMMAND_LIST_OFF)
         cli->command_list[cli->command_list_len++] = lkt_command_clone(&cmd);
-- 
GitLab