HYL_OK3568_LINUX/buildroot/package/input-event-daemon/0002-Support-parsing-configfile-.d-.conf.patch
2025-05-10 21:49:39 +08:00

164 lines
4.5 KiB
Diff

From 9a51dbca603267fd65a64b38e30a356affba38e3 Mon Sep 17 00:00:00 2001
From: Jeffy Chen <jeffy.chen@rock-chips.com>
Date: Thu, 7 Mar 2019 18:20:44 +0800
Subject: [PATCH 2/2] Support parsing <configfile>.d/*.conf
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
---
input-event-daemon.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 61 insertions(+), 8 deletions(-)
diff --git a/input-event-daemon.c b/input-event-daemon.c
index 2a7b527..a324382 100644
--- a/input-event-daemon.c
+++ b/input-event-daemon.c
@@ -4,6 +4,7 @@
#include <unistd.h>
#include <ctype.h>
+#include <dirent.h>
#include <getopt.h>
#include <fcntl.h>
#include <errno.h>
@@ -11,12 +12,15 @@
#include <sys/wait.h>
#include <sys/select.h>
+#include <sys/stat.h>
+#include <sys/types.h>
#include <linux/input.h>
#include "input-event-daemon.h"
#include "input-event-table.h"
+#define DEFAULT_CONFIGURE_FILE "/etc/input-event-daemon.conf";
static int key_event_compare(const key_event_t *a, const key_event_t *b) {
int i, r_cmp;
@@ -385,7 +389,7 @@ static void input_parse_event(struct input_event *event, const char *src) {
}
-void config_parse_file() {
+void config_parse_file(const char *configfile) {
FILE *config_fd;
char buffer[512], *line;
char *section = NULL;
@@ -394,9 +398,13 @@ void config_parse_file() {
int line_num = 0;
int listen_len = 0;
- if((config_fd = fopen(conf.configfile, "r")) == NULL) {
+ if(conf.verbose) {
+ fprintf(stderr, PROGRAM": Start parsing %s...\n", configfile);
+ }
+
+ if((config_fd = fopen(configfile, "r")) == NULL) {
fprintf(stderr, PROGRAM": fopen(%s): %s\n",
- conf.configfile, strerror(errno));
+ configfile, strerror(errno));
exit(EXIT_FAILURE);
}
@@ -461,7 +469,7 @@ void config_parse_file() {
print_error:
if(error != NULL) {
fprintf(stderr, PROGRAM": %s (%s:%d)\n",
- error, conf.configfile, line_num);
+ error, configfile, line_num);
}
@@ -483,6 +491,46 @@ void config_parse_file() {
fclose(config_fd);
}
+//Base on triggerhappy's trigger.c
+static int accept_configure_file(const struct dirent *entry) {
+ const char *suffix = ".conf";
+ const char *name = entry->d_name;
+ char *end = strstr( name, suffix );
+ if ( end && end[ strlen(suffix) ] == '\0' ) {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+//Base on triggerhappy's trigger.c
+void config_parse_dir(const char *path) {
+ struct stat sb;
+ struct dirent **namelist;
+ int n;
+
+ if (stat(path, &sb) < 0 || !S_ISDIR(sb.st_mode))
+ return;
+
+ n = scandir(path, &namelist, accept_configure_file, alphasort);
+ if ( n < 0)
+ return;
+
+ while (n--) {
+ struct stat sf;
+ char *file = namelist[n]->d_name;
+ char *sep = "/";
+ char fpath[strlen(path)+strlen(sep)+strlen(file) + 1];
+ strcpy(fpath, path);
+ strcat(fpath, sep);
+ strcat(fpath, file);
+ if (stat(fpath, &sf) != -1 && S_ISREG(sf.st_mode))
+ config_parse_file(fpath);
+ free(namelist[n]);
+ }
+ free(namelist);
+}
+
static const char *config_key_event(char *shortcut, char *exec) {
int i;
char *code, *modifier;
@@ -619,8 +667,6 @@ static char *config_trim_string(char *str) {
void daemon_init() {
int i;
- conf.configfile = "/etc/input-event-daemon.conf";
-
conf.monitor = 0;
conf.verbose = 0;
conf.daemon = 1;
@@ -814,6 +860,7 @@ static void daemon_print_version() {
}
int main(int argc, char *argv[]) {
+ const char *configfile = DEFAULT_CONFIGURE_FILE;
int result, arguments = 0, listen_len = 0;
static const struct option long_options[] = {
{ "monitor", no_argument, 0, 'm' },
@@ -859,7 +906,7 @@ int main(int argc, char *argv[]) {
return EXIT_SUCCESS;
break;
case 'c': /* config */
- conf.configfile = optarg;
+ configfile = optarg;
break;
case 'v': /* verbose */
conf.verbose = 1;
@@ -891,7 +938,13 @@ int main(int argc, char *argv[]) {
if (!conf.listen[0])
input_open_all_listener();
} else {
- config_parse_file();
+ char path[strlen(configfile) + 3];
+
+ config_parse_file(configfile);
+
+ strcpy(path, configfile);
+ strcat(path, ".d");
+ config_parse_dir(path);
}
daemon_start_listener();
--
2.11.0