ledmon/SOURCES/0002-fix-the-_ledmon_status...

98 lines
3.0 KiB
Diff

From 7d57e3844af6aec97aef0757c85a4b82e999f199 Mon Sep 17 00:00:00 2001
From: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
Date: Wed, 8 May 2019 11:08:36 +0200
Subject: [PATCH] fix the _ledmon_status() function
Remove a wrong strncat() usage and simplify the whole function while at
it. Don't print an exit message when the parent is exiting - it always
exits immediately after fork with status = EXIT_SUCCESS.
Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
---
src/ledmon.c | 36 ++++++++++++++++++------------------
1 file changed, 18 insertions(+), 18 deletions(-)
diff --git a/src/ledmon.c b/src/ledmon.c
index b775e6f..bbe04fc 100644
--- a/src/ledmon.c
+++ b/src/ledmon.c
@@ -178,34 +178,31 @@ static void _ledmon_fini(int __attribute__ ((unused)) status, void *program_name
*
* @param[in] status Status given in the last call to exit()
* function.
- * @param[in] ignore Pointer to placeholder where ignore flag is
- * stored. If flag is set 0 then parent process
- * is exiting, otherwise a child is exiting.
- * This argument must not be NULL pointer.
+ * @param[in] arg Argument passed to on_exit().
*
* @return The function does not return a value.
*/
-static void _ledmon_status(int status, void *ignore)
+static void _ledmon_status(int status, void *arg)
{
- struct log_level_info *lli;
int log_level;
char message[4096];
+ int ignore = *((int *)arg);
- memset(message, 0, 4096);
- if (*((int *)ignore) != 0) {
+ if (ignore)
+ return;
+
+ if (status == STATUS_SUCCESS)
log_level = LOG_LEVEL_INFO;
- } else if (status != STATUS_SUCCESS) {
+ else
log_level = LOG_LEVEL_ERROR;
- snprintf(message, sizeof(message), "parent ");
- } else
- return;
- strncat(message, "exit status is", sizeof(message));
- lli = &log_level_infos[log_level];
+ snprintf(message, sizeof(message), "exit status is %s.",
+ strstatus(status));
+
if (get_log_fd() >= 0)
- _log(log_level, "%s %s.", message, strstatus(status));
+ _log(log_level, message);
else
- syslog(lli->priority, "%s %s.", message, strstatus(status));
+ syslog(log_level_infos[log_level].priority, message);
}
/**
@@ -854,13 +851,14 @@ static void _close_parent_fds(void)
int main(int argc, char *argv[])
{
status_t status = STATUS_SUCCESS;
+ int ignore = 0;
setup_options(&longopt, &shortopt, possible_params,
possible_params_size);
set_invocation_name(argv[0]);
openlog(progname, LOG_PID | LOG_PERROR, LOG_DAEMON);
- if (on_exit(_ledmon_status, &terminate))
+ if (on_exit(_ledmon_status, &ignore))
return STATUS_ONEXIT_ERROR;
if (_cmdline_parse_non_daemonise(argc, argv) != STATUS_SUCCESS)
@@ -900,8 +898,10 @@ int main(int argc, char *argv[])
log_debug("main(): fork() failed (errno=%d).", errno);
exit(EXIT_FAILURE);
}
- if (pid > 0)
+ if (pid > 0) {
+ ignore = 1; /* parent: don't print exit status */
exit(EXIT_SUCCESS);
+ }
pid_t sid = setsid();
--
2.20.1