From: mmj Date: Fri, 14 Jan 2005 15:37:18 +0000 (+1100) Subject: log_oper is now varargs capable, which is much nicer. X-Git-Tag: RELEASE_1_2_0~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7724bec2fba47ccd6ee68983cd9f7b3c334f495d;p=thirdparty%2Fmlmmj.git log_oper is now varargs capable, which is much nicer. --- diff --git a/ChangeLog b/ChangeLog index 58809fb4..39cc2521 100644 --- a/ChangeLog +++ b/ChangeLog @@ -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 diff --git a/include/log_oper.h b/include/log_oper.h index e30ea456..a57d3c39 100644 --- a/include/log_oper.h +++ b/include/log_oper.h @@ -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 */ diff --git a/src/log_oper.c b/src/log_oper.c index 1fa6c828..6953f518 100644 --- a/src/log_oper.c +++ b/src/log_oper.c @@ -29,6 +29,8 @@ #include #include #include +#include +#include #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 @@ int log_oper(const char *prefix, const char *basename, const char *str) 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);