You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lirc/0009-lircd-Warn-for-duplica...

58 lines
1.3 KiB

From 9ad5f93a07be0bf4f645f16dbbf29e2e8cd3b871 Mon Sep 17 00:00:00 2001
From: Alec Leamas <leamas.alec@gmail.com>
Date: Tue, 23 Aug 2016 13:50:48 +0200
Subject: [PATCH 09/10] lircd: Warn for duplicate remote definitions (#222).
---
daemons/lircd.cpp | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/daemons/lircd.cpp b/daemons/lircd.cpp
index 2dc9029..8fd8336 100644
--- a/daemons/lircd.cpp
+++ b/daemons/lircd.cpp
@@ -70,6 +70,9 @@
#include <sys/ioctl.h>
#endif
+#include <string>
+#include <set>
+
#include "lirc_private.h"
#ifdef HAVE_INT_GETGROUPLIST_GROUPS
@@ -540,6 +543,22 @@ static int setup_hardware(void)
return ret;
}
+static void check_config_duplicates(const struct ir_remote* head)
+{
+ std::set<std::string> names;
+ const struct ir_remote* ir;
+ const char* const errmsg =
+ "Duplicate remotes \"%s\" found, problems ahead";
+
+ for (ir = head; ir != NULL; ir = ir->next) {
+ std::string name(ir->name);
+ if (names.count(name) == 1)
+ log_warn(errmsg, name.c_str())
+ else
+ names.insert(name);
+ }
+}
+
void config(void)
{
@@ -572,6 +591,7 @@ void config(void)
}
configfile = filename;
config_remotes = read_config(fd, configfile);
+ check_config_duplicates(config_remotes);
fclose(fd);
if (config_remotes == (void*)-1) {
log_error("reading of config file failed");
--
2.5.5