replace logger vsprintf, Solaris *printf can't handle NULL arguments

This commit is contained in:
Tim Rühsen
2015-02-27 17:34:05 +01:00
parent e2e12530ee
commit 87abcabfd2
2 changed files with 30 additions and 7 deletions

View File

@ -88,10 +88,25 @@ static void _logger_write_func(const mget_logger_t *logger, const char *buf, siz
logger->func(buf, len);
}
static void G_GNUC_MGET_PRINTF_FORMAT(2,0) G_GNUC_MGET_NONNULL((1,2))
_logger_vfprintf(FILE *fp, const char *fmt, va_list args)
{
char sbuf[4096];
mget_buffer_t buf;
int err = errno;
mget_buffer_init(&buf, sbuf, sizeof(sbuf));
mget_buffer_vprintf2(&buf, fmt, args);
fwrite(buf.data, 1, buf.length, fp);
mget_buffer_deinit(&buf);
errno = err;
}
static void G_GNUC_MGET_PRINTF_FORMAT(2,0) G_GNUC_MGET_NONNULL((1,2))
_logger_vprintf_file(const mget_logger_t *logger, const char *fmt, va_list args)
{
vfprintf(logger->fp, fmt, args);
_logger_vfprintf(logger->fp, fmt, args);
}
static void _logger_write_file(const mget_logger_t *logger, const char *buf, size_t len)
@ -105,7 +120,7 @@ _logger_vprintf_fname(const mget_logger_t *logger, const char *fmt, va_list args
FILE *fp = fopen(logger->fname, "a");
if (fp) {
vfprintf(fp, fmt, args);
_logger_vfprintf(fp, fmt, args);
fclose(fp);
}
}

View File

@ -40,13 +40,13 @@
#include "options.h"
#include "log.h"
static void _write_debug(const char *buf, size_t len)
static void _write_debug(const char *data, size_t len)
{
FILE *fp;
struct timeval tv;
struct tm *tp, tbuf;
if (!buf || (ssize_t)len <= 0)
if (!data || (ssize_t)len <= 0)
return;
gettimeofday(&tv, NULL); // obsoleted by POSIX.1-2008, maybe use clock_gettime() ? needs -lrt
@ -60,9 +60,17 @@ static void _write_debug(const char *buf, size_t len)
fp = fopen(config.logfile, "a");
if (fp) {
fprintf(fp, "%02d.%02d%02d%02d.%03ld %s%s",
tp->tm_mday, tp->tm_hour, tp->tm_min, tp->tm_sec, tv.tv_usec / 1000,
buf, buf[len - 1] == '\n' ? "" : "\n");
char sbuf[4096];
mget_buffer_t buf;
mget_buffer_init(&buf, sbuf, sizeof(sbuf));
mget_buffer_printf2(&buf, "%02d.%02d%02d%02d.%03ld ",
tp->tm_mday, tp->tm_hour, tp->tm_min, tp->tm_sec, tv.tv_usec / 1000);
mget_buffer_memcat(&buf, data, len);
if (data[len -1] != '\n')
mget_buffer_memcat(&buf, "\n", 1);
fwrite(buf.data, 1, buf.length, fp);
mget_buffer_deinit(&buf);
if (fp != stderr && fp != stdout)
fclose(fp);