aboutsummaryrefslogtreecommitdiffstats
path: root/broken/propagate/src/log.c
diff options
context:
space:
mode:
Diffstat (limited to 'broken/propagate/src/log.c')
-rw-r--r--broken/propagate/src/log.c108
1 files changed, 108 insertions, 0 deletions
diff --git a/broken/propagate/src/log.c b/broken/propagate/src/log.c
new file mode 100644
index 0000000..bf494fe
--- /dev/null
+++ b/broken/propagate/src/log.c
@@ -0,0 +1,108 @@
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <time.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdarg.h>
+
+FILE *logfile = NULL;
+int loglevel;
+
+#define LOG_FATAL 0
+#define LOG_WARN 1
+#define LOG_INFO 2
+#define LOG_DEBUG 3
+
+static void logit(int, const char *, va_list);
+
+void
+log_init(int level, int logstdout)
+{
+ char name[128];
+
+ if (logstdout == 1) {
+ logfile = stderr;
+ } else {
+ snprintf(name, sizeof(name), "pg.log");
+ logfile = fopen(name, "a+");
+ if (!logfile) {
+ printf("cannot open log file %s!\n", name);
+ exit(1);
+ }
+ }
+ loglevel = level;
+}
+
+void
+log_tmp(const char *msg, ...)
+{
+ va_list ap;
+
+ va_start(ap, msg);
+ vfprintf(logfile, msg, ap);
+ fprintf(logfile, "\n");
+ fflush(logfile);
+ va_end(ap);
+}
+void
+log_debug(const char *msg, ...)
+{
+ va_list ap;
+
+ va_start(ap, msg);
+ logit(LOG_DEBUG, msg, ap);
+ va_end(ap);
+}
+void
+log_info(const char *msg, ...)
+{
+ va_list ap;
+
+ va_start(ap, msg);
+ logit(LOG_INFO, msg, ap);
+ va_end(ap);
+}
+void
+log_warn(const char *msg, ...)
+{
+ va_list ap;
+
+ va_start(ap, msg);
+ logit(LOG_WARN, msg, ap);
+ va_end(ap);
+}
+void
+fatal(const char *msg, ...)
+{
+ va_list ap;
+
+ va_start(ap, msg);
+ logit(LOG_FATAL, msg, ap);
+ va_end(ap);
+
+ exit(1);
+}
+
+static void
+logit(int level, const char *msg, va_list ap)
+{
+ time_t clock;
+ char type;
+
+ if (level <= loglevel) {
+ switch (level) {
+ case LOG_FATAL: type='X'; break;
+ case LOG_WARN: type='W'; break;
+ case LOG_INFO: type='.'; break;
+ case LOG_DEBUG: type=' '; break;
+ }
+ time(&clock);
+ fprintf(logfile, "%d %c ", (int)clock, type);
+ vfprintf(logfile, msg, ap);
+ fprintf(logfile, "\n");
+ fflush(logfile);
+ }
+}
+