From a1a68b7d50e140bae278b883f961d537999fc77b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Fri, 6 Nov 2020 19:26:55 +0100 Subject: [PATCH] =?UTF-8?q?config:=20don=E2=80=99t=20use=20memcmp()=20to?= =?UTF-8?q?=20compare=20structs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.c | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/config.c b/config.c index 1b3c7f53..61247669 100644 --- a/config.c +++ b/config.c @@ -1026,9 +1026,13 @@ has_key_binding_collisions(struct config *conf, const key_combo_list_t *key_comb const struct config_key_modifiers *mods1 = &it->item.modifiers; const struct config_key_modifiers *mods2 = &it2->item.modifiers; - if (memcmp(mods1, mods2, sizeof(*mods1)) == 0 && - it->item.sym == it2->item.sym) - { + bool shift = mods1->shift == mods2->shift; + bool alt = mods1->alt == mods2->alt; + bool ctrl = mods1->ctrl == mods2->ctrl; + bool meta = mods1->meta == mods2->meta; + bool sym = it->item.sym == it2->item.sym; + + if (shift && alt && ctrl && meta && sym) { bool has_pipe = it->item.pipe.cmd != NULL; LOG_AND_NOTIFY_ERR("%s:%d: %s already mapped to '%s%s%s%s'", path, lineno, it2->item.text, @@ -1053,9 +1057,13 @@ has_search_binding_collisions(struct config *conf, const key_combo_list_t *key_c const struct config_key_modifiers *mods1 = &it->item.modifiers; const struct config_key_modifiers *mods2 = &it2->item.modifiers; - if (memcmp(mods1, mods2, sizeof(*mods1)) == 0 && - it->item.sym == it2->item.sym) - { + bool shift = mods1->shift == mods2->shift; + bool alt = mods1->alt == mods2->alt; + bool ctrl = mods1->ctrl == mods2->ctrl; + bool meta = mods1->meta == mods2->meta; + bool sym = it->item.sym == it2->item.sym; + + if (shift && alt && ctrl && meta && sym) { LOG_AND_NOTIFY_ERR("%s:%d: %s already mapped to '%s'", path, lineno, it2->item.text, search_binding_action_map[it->item.action]); @@ -1412,11 +1420,14 @@ has_mouse_binding_collisions(struct config *conf, const key_combo_list_t *key_co const struct config_key_modifiers *mods1 = &it->item.modifiers; const struct config_key_modifiers *mods2 = &it2->item.modifiers; - if (memcmp(mods1, mods2, sizeof(*mods1)) == 0 && - it->item.button == it2->item.m.button && - it->item.count == it2->item.m.count) - { - LOG_AND_NOTIFY_ERR("%s:%d: %s already mapped to '%s'", + bool shift = mods1->shift == mods2->shift; + bool alt = mods1->alt == mods2->alt; + bool ctrl = mods1->ctrl == mods2->ctrl; + bool meta = mods1->meta == mods2->meta; + bool button = it->item.button == it2->item.m.button; + bool count = it->item.count == it2->item.m.count; + + if (shift && alt && ctrl && meta && button && count) { path, lineno, it2->item.text, binding_action_map[it->item.action]); return true;