summaryrefslogtreecommitdiff
path: root/libbb/verror_msg.c
diff options
context:
space:
mode:
authorDenis Vlasenko2006-09-06 18:36:50 +0000
committerDenis Vlasenko2006-09-06 18:36:50 +0000
commit3538b9a8822421b7c8596a33a917dcf2f99c92b7 (patch)
tree768c23fe79bb81583de7376a4d744632d888d303 /libbb/verror_msg.c
parent5d725462d44268f9a86030daaa6f6396d32f796c (diff)
downloadbusybox-3538b9a8822421b7c8596a33a917dcf2f99c92b7.zip
busybox-3538b9a8822421b7c8596a33a917dcf2f99c92b7.tar.gz
Implement optional syslog logging using ordinary
bb_xx_msg calls, and convert networking/* to it. The rest of bbox will be converted gradually.
Diffstat (limited to 'libbb/verror_msg.c')
-rw-r--r--libbb/verror_msg.c34
1 files changed, 30 insertions, 4 deletions
diff --git a/libbb/verror_msg.c b/libbb/verror_msg.c
index d458a7b..237547d 100644
--- a/libbb/verror_msg.c
+++ b/libbb/verror_msg.c
@@ -11,11 +11,37 @@
#include <errno.h>
#include <string.h>
#include <stdlib.h>
+#include <syslog.h>
#include "libbb.h"
-void bb_verror_msg(const char *s, va_list p)
+int logmode = LOGMODE_STDIO;
+
+void bb_verror_msg(const char *s, va_list p, const char* strerr)
{
- fflush(stdout);
- fprintf(stderr, "%s: ", bb_applet_name);
- vfprintf(stderr, s, p);
+ /* va_copy is used because it is not portable
+ * to use va_list p twice */
+ va_list p2;
+ va_copy(p2, p);
+
+ if (logmode & LOGMODE_STDIO) {
+ fflush(stdout);
+ fprintf(stderr, "%s: ", bb_applet_name);
+ vfprintf(stderr, s, p);
+ if (!strerr)
+ fputc('\n', stderr);
+ else
+ fprintf(stderr, ": %s\n", strerr);
+ }
+ if (logmode & LOGMODE_SYSLOG) {
+ if (!strerr)
+ vsyslog(LOG_ERR, s, p2);
+ else {
+ char *msg;
+ if (vasprintf(&msg, s, p2) < 0)
+ bb_error_msg_and_die(bb_msg_memory_exhausted);
+ syslog(LOG_ERR, "%s: %s", msg, strerr);
+ free(msg);
+ }
+ }
+ va_end(p2);
}