summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2013-09-19 12:18:56 +0800
committerJeremy Kerr <jk@ozlabs.org>2013-09-19 21:36:32 +0800
commit307b4b091e0bc298964e90888bf179431e32c134 (patch)
tree47cc758b0929eb29a216efd945b9ad46f4ffb19a
parente52b37c27c267c882d82cd1e34412817b5a4dbce (diff)
downloadtalos-petitboot-307b4b091e0bc298964e90888bf179431e32c134.tar.gz
talos-petitboot-307b4b091e0bc298964e90888bf179431e32c134.zip
lib/log: Cleanup log API
Rather than exposing log internals (through always_flush and set_stream), do all logging init through pb_log_init(). If pb_log_init() hasn't been called, pb_log will drop messages. Also, add a pb_debug() function, specifically for debugging information. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
-rw-r--r--discover/pb-discover.c19
-rw-r--r--lib/log/log.c48
-rw-r--r--lib/log/log.h15
-rw-r--r--test/urls/parse-url.c5
-rw-r--r--ui/ncurses/generic-main.c14
-rw-r--r--ui/twin/main-generic.c15
6 files changed, 65 insertions, 51 deletions
diff --git a/discover/pb-discover.c b/discover/pb-discover.c
index 6d62e14..c16d690 100644
--- a/discover/pb-discover.c
+++ b/discover/pb-discover.c
@@ -123,6 +123,7 @@ int main(int argc, char *argv[])
struct opts opts;
struct pb_udev *udev;
struct user_event *uev;
+ FILE *log;
if (opts_parse(&opts, argc, argv)) {
print_usage();
@@ -139,17 +140,17 @@ int main(int argc, char *argv[])
return EXIT_SUCCESS;
}
+ log = stderr;
if (strcmp(opts.log_file, "-")) {
- FILE *log = fopen(opts.log_file, "a");
-
- assert(log);
- pb_log_set_stream(log);
- } else
- pb_log_set_stream(stderr);
+ log = fopen(opts.log_file, "a");
+ if (!log) {
+ fprintf(stderr, "can't open log file %s, logging to "
+ "stderr\n", opts.log_file);
+ log = stderr;
+ }
+ }
+ pb_log_init(log);
-#if defined(DEBUG)
- pb_log_always_flush(1);
-#endif
pb_log("--- pb-discover ---\n");
/* we look for closed sockets when we write, so ignore SIGPIPE */
diff --git a/lib/log/log.c b/lib/log/log.c
index ecbd714..b250a9e 100644
--- a/lib/log/log.c
+++ b/lib/log/log.c
@@ -1,38 +1,54 @@
+#include <assert.h>
#include <stdarg.h>
#include "log.h"
static FILE *logf;
-static int always_flush;
+static bool debug;
+
+static void __log(const char *fmt, va_list ap)
+{
+ if (!logf)
+ return;
+ vfprintf(logf, fmt, ap);
+ if (debug)
+ fflush(logf);
+}
void pb_log(const char *fmt, ...)
{
va_list ap;
- FILE *stream;
-
- stream = logf ? logf : stderr;
-
va_start(ap, fmt);
- vfprintf(stream, fmt, ap);
+ __log(fmt, ap);
va_end(ap);
-
- if (always_flush)
- fflush(stream);
}
-void pb_log_set_stream(FILE *stream)
+void pb_debug(const char *fmt, ...)
{
- fflush(logf ? logf : stderr);
- logf = stream;
+ va_list ap;
+ if (!debug)
+ return;
+ va_start(ap, fmt);
+ __log(fmt, ap);
+ va_end(ap);
}
-FILE * pb_log_get_stream(void)
+void __pb_log_init(FILE *fp, bool _debug)
{
- return logf ? logf : stderr;
+ if (logf)
+ fflush(logf);
+ logf = fp;
+ debug = _debug;
}
-void pb_log_always_flush(int state)
+FILE *pb_log_get_stream(void)
{
- always_flush = state;
+ static FILE *null_stream;
+ if (!logf) {
+ if (!null_stream)
+ null_stream = fopen("/dev/null", "a");
+ return null_stream;
+ }
+ return logf;
}
diff --git a/lib/log/log.h b/lib/log/log.h
index 6f44bea..e34de33 100644
--- a/lib/log/log.h
+++ b/lib/log/log.h
@@ -1,11 +1,20 @@
#ifndef _LOG_H
#define _LOG_H
+#include <stdbool.h>
#include <stdio.h>
void __attribute__ ((format (printf, 1, 2))) pb_log(const char *fmt, ...);
-void pb_log_set_stream(FILE *stream);
-FILE * pb_log_get_stream(void);
-void pb_log_always_flush(int state);
+void __attribute__ ((format (printf, 1, 2))) pb_debug(const char *fmt, ...);
+
+void __pb_log_init(FILE *stream, bool debug);
+
+#ifdef DEBUG
+#define pb_log_init(s) __pb_log_init(s, true)
+#else
+#define pb_log_init(s) __pb_log_init(s, false)
+#endif
+
+FILE *pb_log_get_stream(void);
#endif /* _LOG_H */
diff --git a/test/urls/parse-url.c b/test/urls/parse-url.c
index cfa6762..1688eab 100644
--- a/test/urls/parse-url.c
+++ b/test/urls/parse-url.c
@@ -8,17 +8,12 @@
int main(int argc, char **argv)
{
struct pb_url *url;
- FILE *null;
if (argc != 2 && argc != 3) {
fprintf(stderr, "Usage: %s <URL> [update]\n", argv[0]);
return EXIT_FAILURE;
}
- /* discard log output */
- null = fopen("/dev/null", "w");
- pb_log_set_stream(null);
-
url = pb_url_parse(NULL, argv[1]);
if (!url)
return EXIT_FAILURE;
diff --git a/ui/ncurses/generic-main.c b/ui/ncurses/generic-main.c
index cafd23a..9236a80 100644
--- a/ui/ncurses/generic-main.c
+++ b/ui/ncurses/generic-main.c
@@ -206,6 +206,7 @@ int main(int argc, char *argv[])
int result;
int cui_result;
struct opts opts;
+ FILE *log;
result = opts_parse(&opts, argc, argv);
@@ -224,20 +225,15 @@ int main(int argc, char *argv[])
return EXIT_SUCCESS;
}
+ log = stderr;
if (strcmp(opts.log_file, "-")) {
- FILE *log = fopen(opts.log_file, "a");
+ log = fopen(opts.log_file, "a");
if (!log)
log = fopen("/dev/null", "a");
+ }
- assert(log);
- pb_log_set_stream(log);
- } else
- pb_log_set_stream(stderr);
-
-#if defined(DEBUG)
- pb_log_always_flush(1);
-#endif
+ pb_log_init(log);
pb_log("--- petitboot-nc ---\n");
diff --git a/ui/twin/main-generic.c b/ui/twin/main-generic.c
index 99520d0..649ad00 100644
--- a/ui/twin/main-generic.c
+++ b/ui/twin/main-generic.c
@@ -268,6 +268,7 @@ int main(int argc, char *argv[])
int result;
int ui_result;
struct pbt_client *client;
+ FILE *log;
result = pbt_opts_parse(&opts, argc, argv);
@@ -286,17 +287,13 @@ int main(int argc, char *argv[])
return EXIT_SUCCESS;
}
+ log = stderr;
if (strcmp(opts.log_file, "-")) {
FILE *log = fopen(opts.log_file, "a");
-
- assert(log);
- pb_log_set_stream(log);
- } else
- pb_log_set_stream(stderr);
-
-#if defined(DEBUG)
- pb_log_always_flush(1);
-#endif
+ if (!log)
+ log = stderr;
+ }
+ pb_log_init(log);
pb_log("--- petitboot-twin ---\n");
OpenPOWER on IntegriCloud