Adapt CLI to use new libflashrom interface' print callback

This renames CLI's print() to flashrom_print_cb() and registers it
through the new libflashrom interface.

v2: Add libflashrom.o to LIB_OBJS now that everything can be linked
    together.

Change-Id: Idf19978eb8e340d258199193d2978f37409e9983
Signed-off-by: Nico Huber <nico.huber@secunet.com>
Reviewed-on: https://review.coreboot.org/17948
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: David Hendricks <david.hendricks@gmail.com>
diff --git a/Makefile b/Makefile
index 88130c8..01a179d 100644
--- a/Makefile
+++ b/Makefile
@@ -519,7 +519,7 @@
 ###############################################################################
 # Library code.
 
-LIB_OBJS = layout.o flashrom.o udelay.o programmer.o helpers.o
+LIB_OBJS = libflashrom.o layout.o flashrom.o udelay.o programmer.o helpers.o
 
 ###############################################################################
 # Frontend related stuff.
diff --git a/cli_classic.c b/cli_classic.c
index a2c2014..984a4da 100644
--- a/cli_classic.c
+++ b/cli_classic.c
@@ -30,6 +30,7 @@
 #include "flash.h"
 #include "flashchips.h"
 #include "programmer.h"
+#include "libflashrom.h"
 
 static void cli_classic_usage(const char *name)
 {
@@ -135,6 +136,8 @@
 	char *tempstr = NULL;
 	char *pparam = NULL;
 
+	flashrom_set_log_callback((flashrom_log_callback *)&flashrom_print_cb);
+
 	print_version();
 	print_banner();
 
diff --git a/cli_output.c b/cli_output.c
index feafbd2..e697985 100644
--- a/cli_output.c
+++ b/cli_output.c
@@ -71,19 +71,19 @@
 #endif /* !STANDALONE */
 
 /* Please note that level is the verbosity, not the importance of the message. */
-int print(enum msglevel level, const char *fmt, ...)
+int flashrom_print_cb(enum msglevel level, const char *fmt, va_list ap)
 {
-	va_list ap;
 	int ret = 0;
 	FILE *output_type = stdout;
 
+	va_list logfile_args;
+	va_copy(logfile_args, ap);
+
 	if (level < MSG_INFO)
 		output_type = stderr;
 
 	if (level <= verbose_screen) {
-		va_start(ap, fmt);
 		ret = vfprintf(output_type, fmt, ap);
-		va_end(ap);
 		/* msg_*spew often happens inside chip accessors in possibly
 		 * time-critical operations. Don't slow them down by flushing. */
 		if (level != MSG_SPEW)
@@ -91,12 +91,11 @@
 	}
 #ifndef STANDALONE
 	if ((level <= verbose_logfile) && logfile) {
-		va_start(ap, fmt);
-		ret = vfprintf(logfile, fmt, ap);
-		va_end(ap);
+		ret = vfprintf(logfile, fmt, logfile_args);
 		if (level != MSG_SPEW)
 			fflush(logfile);
 	}
 #endif /* !STANDALONE */
+	va_end(logfile_args);
 	return ret;
 }
diff --git a/flash.h b/flash.h
index 1da7e41..db8430c 100644
--- a/flash.h
+++ b/flash.h
@@ -30,6 +30,7 @@
 #include <stdio.h>
 #include <stdint.h>
 #include <stddef.h>
+#include <stdarg.h>
 #include <stdbool.h>
 #if IS_WINDOWS
 #include <windows.h>
@@ -321,6 +322,7 @@
 	MSG_DEBUG2	= 4,
 	MSG_SPEW	= 5,
 };
+int flashrom_print_cb(enum msglevel level, const char *fmt, va_list ap);
 /* Let gcc and clang check for correct printf-style format strings. */
 int print(enum msglevel level, const char *fmt, ...)
 #ifdef __MINGW32__