Implement optional syslog logging using ordinary
bb_xx_msg calls, and convert networking/* to it.
The rest of bbox will be converted gradually.
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);
}