]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Added new subdir for UNIX-dependent files.
authorMartin Mares <mj@ucw.cz>
Sun, 3 May 1998 16:42:08 +0000 (16:42 +0000)
committerMartin Mares <mj@ucw.cz>
Sun, 3 May 1998 16:42:08 +0000 (16:42 +0000)
Now contains only functions for logging, but it will change soon.

sysdep/unix/Makefile [new file with mode: 0644]
sysdep/unix/log.c [new file with mode: 0644]

diff --git a/sysdep/unix/Makefile b/sysdep/unix/Makefile
new file mode 100644 (file)
index 0000000..60f8057
--- /dev/null
@@ -0,0 +1,3 @@
+OBJS=log.o
+
+include $(TOPDIR)/Rules
diff --git a/sysdep/unix/log.c b/sysdep/unix/log.c
new file mode 100644 (file)
index 0000000..8d9facf
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ *     BIRD Library -- Logging Functions
+ *
+ *     (c) 1998 Martin Mares <mj@ucw.cz>
+ *
+ *     Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <sys/time.h>
+
+#include "nest/bird.h"
+
+static int log_inited;
+static FILE *logf = NULL;
+static FILE *dbgf = NULL;
+
+#ifdef HAVE_SYSLOG
+#include <sys/syslog.h>
+
+static int syslog_priorities[] = {
+  LOG_INFO,
+  LOG_DEBUG,
+  LOG_INFO,
+  LOG_WARNING,
+  LOG_ERR,
+  LOG_NOTICE,
+  LOG_CRIT
+};
+#endif
+
+static char *class_names[] = {
+  "???",
+  "DBG",
+  "INFO",
+  "WARN",
+  "ERR",
+  "AUTH",
+  "FATAL"
+};
+
+static void
+vlog(int class, char *msg, va_list args)
+{
+  if (logf)
+    {
+      time_t now = time(NULL);
+      struct tm *tm = localtime(&now);
+
+      fprintf(logf, "%02d-%02d-%04d %02d:%02d:%02d <%s> ",
+             tm->tm_mday,
+             tm->tm_mon+1,
+             tm->tm_year+1900,
+             tm->tm_hour,
+             tm->tm_min,
+             tm->tm_sec,
+             class_names[class]);
+      vfprintf(logf, msg, args);
+      fputc('\n', logf);
+      fflush(logf);
+    }
+#ifdef HAVE_SYSLOG
+  else if (log_inited)
+    vsyslog(syslog_priorities[class], msg, args);
+#endif
+  else
+    {
+      fputs("bird: ", stderr);
+      vfprintf(stderr, msg, args);
+      fputc('\n', stderr);
+      fflush(stderr);
+    }
+}
+
+void
+log(char *msg, ...)
+{
+  int class = 1;
+  va_list args;
+
+  va_start(args, msg);
+  if (*msg >= 1 && *msg <= 6)
+    class = *msg++;
+  vlog(class, msg, args);
+  va_end(args);
+}
+
+void
+die(char *msg, ...)
+{
+  va_list args;
+
+  va_start(args, msg);
+  vlog(6, msg, args);
+  exit(1);
+}
+
+void
+debug(char *msg, ...)
+{
+  va_list args;
+
+  va_start(args, msg);
+  if (dbgf)
+    vfprintf(dbgf, msg, args);
+  va_end(args);
+}
+
+void
+log_init(char *f)
+{
+  FILE *new;
+
+  if (!f)
+    new = stderr;
+  else if (!*f)
+    {
+      new = NULL;
+#ifdef HAVE_SYSLOG
+      openlog("bird", LOG_CONS | LOG_NDELAY, LOG_DAEMON);
+#endif
+    }
+  else if (!(new = fopen(f, "a")))
+    {
+      log(L_ERR "Unable to open log file `%s': %m", f);
+      return;
+    }
+  if (logf && logf != stderr)
+    fclose(logf);
+  logf = new;
+  log_inited = 1;
+}
+
+void
+log_init_debug(char *f)
+{
+  if (dbgf && dbgf != stderr)
+    fclose(dbgf);
+  if (!f)
+    dbgf = stderr;
+  else if (!*f)
+    dbgf = NULL;
+  else if (!(dbgf = fopen(f, "a")))
+    log(L_ERR "Error opening debug file `%s': %m", f);
+}