Alert is often followed by exit.
Alert_exit embedded the exit call.
---
 include/proto/log.h |  9 +++++++++
 src/log.c           | 31 ++++++++++++++++++++++++++-----
 2 files changed, 35 insertions(+), 5 deletions(-)

diff --git a/include/proto/log.h b/include/proto/log.h
index e606a3c..7afa2a0 100644
--- a/include/proto/log.h
+++ b/include/proto/log.h
@@ -90,8 +90,17 @@ void parse_logformat_string(const char *str, struct proxy 
*curproxy, struct list
  * Displays the message on stderr with the date and pid. Overrides the quiet
  * mode during startup.
  */
+void Alert_va(const char *fmt, va_list argp);
+/*
+ * Same as Alert_va with printf argument style
+ */
 void Alert(const char *fmt, ...)
        __attribute__ ((format(printf, 1, 2)));
+/*
+ * Give the possibility to exit just after Alert.
+ */
+void Alert_exit(int exit_code, const char *fmt, ...)
+       __attribute__ ((format(printf, 2, 3)));
 
 /*
  * Displays the message on stderr with the date and pid.
diff --git a/src/log.c b/src/log.c
index 2d02247..949436a 100644
--- a/src/log.c
+++ b/src/log.c
@@ -622,23 +622,44 @@ void parse_logformat_string(const char *fmt, struct proxy 
*curproxy, struct list
  * Displays the message on stderr with the date and pid. Overrides the quiet
  * mode during startup.
  */
-void Alert(const char *fmt, ...)
+void Alert_va(const char *fmt, va_list argp)
 {
-       va_list argp;
        struct tm tm;
 
        if (!(global.mode & MODE_QUIET) || (global.mode & (MODE_VERBOSE | 
MODE_STARTING))) {
-               va_start(argp, fmt);
-
                get_localtime(date.tv_sec, &tm);
                fprintf(stderr, "[ALERT] %03d/%02d%02d%02d (%d) : ",
                        tm.tm_yday, tm.tm_hour, tm.tm_min, tm.tm_sec, 
(int)getpid());
                vfprintf(stderr, fmt, argp);
                fflush(stderr);
-               va_end(argp);
        }
 }
 
+/*
+ * Same as Alert_va with printf argument style
+ */
+void Alert(const char *fmt, ...)
+{
+       va_list argp;
+
+       va_start(argp, fmt);
+       Alert_va(fmt, argp);
+       va_end(argp);
+}
+
+/*
+ * Give the possibility to exit just after Alert.
+ */
+void Alert_exit(int exit_code, const char *fmt, ...)
+{
+       va_list argp;
+
+       va_start(argp, fmt);
+       Alert_va(fmt, argp);
+       va_end(argp);
+       if (exit_code)
+               exit(exit_code);
+}
 
 /*
  * Displays the message on stderr with the date and pid.
-- 
2.8.2


Reply via email to