changeset 420:354fbcc687a4

log_oper is now varargs capable, which is much nicer.
author mmj
date Sat, 15 Jan 2005 02:37:18 +1100
parents 90fe4ea4a2e3
children 5388b1eb5ca9
files ChangeLog include/log_oper.h src/log_oper.c
diffstat 3 files changed, 21 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Fri Jan 14 19:07:04 2005 +1100
+++ b/ChangeLog	Sat Jan 15 02:37:18 2005 +1100
@@ -1,3 +1,4 @@
+ o Make log_oper() varargs capable, thanks Rob Holland
 1.1.1-RC1
  o Never discard anything from LISTDIR/queue/, let the admin be able to judge
  o Grab the lock when sending a mail to make sure noone does bad things
--- a/include/log_oper.h	Fri Jan 14 19:07:04 2005 +1100
+++ b/include/log_oper.h	Sat Jan 15 02:37:18 2005 +1100
@@ -24,6 +24,6 @@
 #ifndef LOG_OPER_H
 #define LOG_OPER_H
 
-int log_oper(const char *prefix, const char *basename, const char *str);
+int log_oper(const char *prefix, const char *basename, const char *fmt, ...);
 
 #endif /* LOG_OPER_H */
--- a/src/log_oper.c	Fri Jan 14 19:07:04 2005 +1100
+++ b/src/log_oper.c	Sat Jan 15 02:37:18 2005 +1100
@@ -29,6 +29,8 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <string.h>
+#include <stdlib.h>
+#include <stdarg.h>
 
 #include "mlmmj.h"
 #include "log_error.h"
@@ -38,12 +40,14 @@
 #include "wrappers.h"
 #include "memory.h"
 
-int log_oper(const char *prefix, const char *basename, const char *str)
+int log_oper(const char *prefix, const char *basename, const char *fmt, ...)
 {
 	int fd;
-	char ct[26], *logstr, *logfilename, *tmp;
+	char ct[26], *logstr, *logfilename, *tmp, log_msg[256];
 	struct stat st;
 	time_t t;
+	va_list ap;
+	size_t i;
 
 	logfilename = concatstr(2, prefix, basename);
 	if(lstat(logfilename, &st) < 0 && errno != ENOENT) {
@@ -84,7 +88,19 @@
 		return -1;
 	}
 
-	logstr = concatstr(4, ct, ":", str, "\n");
+	va_start(ap, fmt);
+	i = vsnprintf(log_msg, sizeof(log_msg), fmt, ap);
+	if(i < 0) {
+		va_end(ap);
+		log_error(LOG_ARGS, "Failed to format log message: %s", fmt);
+		return -1;
+	}
+	if(i > sizeof(log_msg))
+		log_error(LOG_ARGS, "Log message truncated");
+
+	va_end(ap);
+
+	logstr = concatstr(4, ct, " ", log_msg, "\n");
 	if(writen(fd, logstr, strlen(logstr)) < 0)
 		log_error(LOG_ARGS, "Could not write to %s", logfilename);