summaryrefslogtreecommitdiff
path: root/sysdep/unix/log.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdep/unix/log.c')
-rw-r--r--sysdep/unix/log.c47
1 files changed, 17 insertions, 30 deletions
diff --git a/sysdep/unix/log.c b/sysdep/unix/log.c
index 5dd7ef7f..a6e1a56f 100644
--- a/sysdep/unix/log.c
+++ b/sysdep/unix/log.c
@@ -1,7 +1,7 @@
/*
* BIRD Library -- Logging Functions
*
- * (c) 1998 Martin Mares <mj@ucw.cz>
+ * (c) 1998--1999 Martin Mares <mj@ucw.cz>
*
* Can be freely distributed and used under the terms of the GNU GPL.
*/
@@ -12,6 +12,7 @@
#include <sys/time.h>
#include "nest/bird.h"
+#include "nest/cli.h"
#include "lib/string.h"
static int log_inited;
@@ -42,40 +43,21 @@ static char *class_names[] = {
"FATAL"
};
-/* FIXME: Use better buffering */
-
-static void
-bvfprintf(FILE *f, char *fmt, va_list args)
-{
- char buf[4096];
- int n;
-
- n = bvsnprintf(buf, sizeof(buf), fmt, args);
- if (n >= 0)
- fwrite(buf, n, sizeof(char), f);
- else
- fprintf(stderr, "BIRD: warning: logging buffer overflow!\n");
-}
-
static void
-bfprintf(FILE *f, char *fmt, ...)
+vlog(int class, char *msg, va_list args)
{
- va_list args;
+ char buf[1024];
+ char date[32];
- va_start(args, fmt);
- bvfprintf(f, fmt, args);
- va_end(args);
-}
+ if (bvsnprintf(buf, sizeof(buf)-1, msg, args) < 0)
+ bsprintf(buf + sizeof(buf) - 100, " ... <too long>");
-static void
-vlog(int class, char *msg, va_list args)
-{
if (logf)
{
time_t now = time(NULL);
struct tm *tm = localtime(&now);
- bfprintf(logf, "%02d-%02d-%04d %02d:%02d:%02d <%s> ",
+ bsprintf(date, "%02d-%02d-%04d %02d:%02d:%02d <%s> ",
tm->tm_mday,
tm->tm_mon+1,
tm->tm_year+1900,
@@ -83,21 +65,23 @@ vlog(int class, char *msg, va_list args)
tm->tm_min,
tm->tm_sec,
class_names[class]);
- bvfprintf(logf, msg, args);
+ fputs(date, logf);
+ fputs(buf, logf);
fputc('\n', logf);
fflush(logf);
}
#ifdef HAVE_SYSLOG
else if (log_inited)
- vsyslog(syslog_priorities[class], msg, args);
+ syslog(syslog_priorities[class], "%s", buf);
#endif
else
{
fputs("bird: ", stderr);
- bvfprintf(stderr, msg, args);
+ fputs(buf, stderr);
fputc('\n', stderr);
fflush(stderr);
}
+ cli_echo(class, buf);
}
void
@@ -137,10 +121,13 @@ void
debug(char *msg, ...)
{
va_list args;
+ char buf[1024];
va_start(args, msg);
+ if (bvsnprintf(buf, sizeof(buf), msg, args) < 0)
+ bsprintf(buf + sizeof(buf) - 100, " ... <too long>\n");
if (dbgf)
- bvfprintf(dbgf, msg, args);
+ fputs(buf, dbgf);
va_end(args);
}