代码拉取完成,页面将自动刷新
From 092e251ac3a880284f72c45a42990734e33b4df1 Mon Sep 17 00:00:00 2001
From: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Date: Mon, 15 Jul 2024 13:40:37 +0200
Subject: [PATCH 43/85] trigger: parse only once TRIGGER_DIR env variable
Instead of parsing TRIGGER_DIR every time a new event happens,
store the trigger full path, simplifying the logic and avoiding
memory leaks.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
ras-mc-handler.c | 13 ++++++-------
trigger.c | 23 +++++++++--------------
trigger.h | 2 +-
3 files changed, 16 insertions(+), 22 deletions(-)
diff --git a/ras-mc-handler.c b/ras-mc-handler.c
index 203c5af..b62dfb6 100644
--- a/ras-mc-handler.c
+++ b/ras-mc-handler.c
@@ -39,7 +39,9 @@ void mc_event_trigger_setup(void)
trigger = getenv("MC_CE_TRIGGER");
if (trigger && strcmp(trigger, "")) {
- if (trigger_check(trigger) < 0) {
+ mc_ce_trigger = trigger_check(trigger);
+
+ if (!mc_ce_trigger) {
log(ALL, LOG_ERR,
"Cannot access mc_event ce trigger `%s`\n",
trigger);
@@ -47,13 +49,14 @@ void mc_event_trigger_setup(void)
log(ALL, LOG_INFO,
"Setup mc_event ce trigger `%s`\n",
trigger);
- mc_ce_trigger = trigger;
}
}
trigger = getenv("MC_UE_TRIGGER");
if (trigger && strcmp(trigger, "")) {
- if (trigger_check(trigger) < 0) {
+ mc_ue_trigger = trigger_check(trigger);
+
+ if (!mc_ue_trigger) {
log(ALL, LOG_ERR,
"Cannot access mc_event ue trigger `%s`\n",
trigger);
@@ -61,7 +64,6 @@ void mc_event_trigger_setup(void)
log(ALL, LOG_INFO,
"Setup mc_event ue trigger `%s`\n",
trigger);
- mc_ue_trigger = trigger;
}
}
}
@@ -72,9 +74,6 @@ static void run_mc_trigger(struct ras_mc_event *ev, const char *mc_trigger)
int ei = 0;
int i;
- if (!strcmp(mc_trigger, ""))
- return;
-
if (asprintf(&env[ei++], "PATH=%s", getenv("PATH") ?: "/sbin:/usr/sbin:/bin:/usr/bin") < 0)
goto free;
if (asprintf(&env[ei++], "TIMESTAMP=%s", ev->timestamp) < 0)
diff --git a/trigger.c b/trigger.c
index 0d91e05..0ee1a5e 100644
--- a/trigger.c
+++ b/trigger.c
@@ -9,15 +9,10 @@
void run_trigger(const char *trigger, char *argv[], char **env, const char *reporter)
{
pid_t child;
- char *path;
int status;
- char *trigger_dir = getenv("TRIGGER_DIR");
log(SYSLOG, LOG_INFO, "Running trigger `%s' (reporter: %s)\n", trigger, reporter);
- if (asprintf(&path, "%s/%s", trigger_dir, trigger) < 0)
- return;
-
child = fork();
if (child < 0) {
log(SYSLOG, LOG_ERR, "Cannot create process for trigger");
@@ -25,7 +20,7 @@ void run_trigger(const char *trigger, char *argv[], char **env, const char *repo
}
if (child == 0) {
- execve(path, argv, env);
+ execve(trigger, argv, env);
_exit(127);
} else {
waitpid(child, &status, 0);
@@ -39,7 +34,7 @@ void run_trigger(const char *trigger, char *argv[], char **env, const char *repo
}
}
-int trigger_check(const char *s)
+const char *trigger_check(const char *s)
{
char *name;
int rc;
@@ -47,14 +42,14 @@ int trigger_check(const char *s)
if (trigger_dir) {
if (asprintf(&name, "%s/%s", trigger_dir, s) < 0)
- return -1;
- } else
- name = s;
+ return NULL;
+ s = name;
+ }
- rc = access(name, R_OK|X_OK);
+ rc = access(s, R_OK|X_OK);
- if (trigger_dir)
- free(name);
+ if (!rc)
+ return(s);
- return rc;
+ return NULL;
}
diff --git a/trigger.h b/trigger.h
index ccd1a9b..aea29b5 100644
--- a/trigger.h
+++ b/trigger.h
@@ -6,7 +6,7 @@ struct event_trigger {
void (*setup)(void);
};
-int trigger_check(const char *s);
+const char *trigger_check(const char *s);
void run_trigger(const char *trigger, char *argv[], char **env, const char* reporter);
#endif
--
2.33.1
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。