On Wed, 8 Feb 2023 12:48:31 -0500
Laine Stump <laine(a)redhat.com> wrote:
Almost all occurences of err() are either
immediately followed by
exit(EXIT_FAILURE), usage(argv[0]) (which itself then calls
exit(EXIT_FAILURE), or that is what's done immediately after returning
from the function that calls err(). Modify the errfn macro so that its
instantiations can include exit(EXIT_FAILURE) at the end, and use that
to create a new function errxit() that will log an error and then
exit.
Signed-off-by: Laine Stump <laine(a)redhat.com>
---
log.c | 13 ++++++++-----
log.h | 1 +
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/log.c b/log.c
index 0ab0adf..4956914 100644
--- a/log.c
+++ b/log.c
@@ -45,7 +45,7 @@ static char log_header[BUFSIZ]; /* File header, written back on cuts
*/
static time_t log_start; /* Start timestamp */
int log_trace; /* --trace mode enabled */
-#define logfn(name, level) \
+#define logfn(name, level, doexit) \
void name(const char *format, ...) { \
struct timespec tp; \
va_list args; \
@@ -76,6 +76,8 @@ void name(const char *format, ...) { \
if (format[strlen(format)] != '\n') \
fprintf(stderr, "\n"); \
} \
+ if (doexit) \
A blank line before this would make it more consistent.
+ exit(EXIT_FAILURE); \
}
/* Prefixes for log file messages, indexed by priority */
@@ -88,10 +90,11 @@ const char *logfile_prefix[] = {
" ", /* LOG_DEBUG */
};
-logfn(err, LOG_ERR)
-logfn(warn, LOG_WARNING)
-logfn(info, LOG_INFO)
-logfn(debug, LOG_DEBUG)
+logfn(errexit, LOG_ERR, 1)
+logfn(err, LOG_ERR, 0)
+logfn(warn, LOG_WARNING, 0)
+logfn(info, LOG_INFO, 0)
+logfn(debug, LOG_DEBUG, 0)
/**
* log_go_daemon() - tell logging subsystem that the process has been
diff --git a/log.h b/log.h
index a57c777..ed19415 100644
--- a/log.h
+++ b/log.h
@@ -10,6 +10,7 @@
#define LOGFILE_CUT_RATIO 30 /* When full, cut ~30% size */
#define LOGFILE_SIZE_MIN (5UL * MAX(BUFSIZ, PAGE_SIZE))
+void errexit(const char *format, ...);
void err(const char *format, ...);
void warn(const char *format, ...);
void info(const char *format, ...);
Other than that, this looks good to me.
LGTM. Personally I like to call such functions "die()".