mirror of
https://review.coreboot.org/flashrom.git
synced 2025-07-01 22:21:16 +02:00
Add logfile support
Usage: flashrom --output logfile.txt Logfile output has at least dbg2 verbosity or screen verbosity, whichever is greater. Corresponding to flashrom svn r1540. Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Tested on Linux, Windows and FreeBSD. Acked-by: Idwer Vollering <vidwer@gmail.com>
This commit is contained in:
56
cli_output.c
56
cli_output.c
@ -2,6 +2,7 @@
|
||||
* This file is part of the flashrom project.
|
||||
*
|
||||
* Copyright (C) 2009 Sean Nelson <audiohacked@gmail.com>
|
||||
* Copyright (C) 2011 Carl-Daniel Hailfinger
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -20,8 +21,52 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include "flash.h"
|
||||
|
||||
#ifndef STANDALONE
|
||||
static FILE *logfile = NULL;
|
||||
|
||||
int close_logfile(void)
|
||||
{
|
||||
if (!logfile)
|
||||
return 0;
|
||||
/* No need to call fflush() explicitly, fclose() already does that. */
|
||||
if (fclose(logfile)) {
|
||||
/* fclose returned an error. Stop writing to be safe. */
|
||||
logfile = NULL;
|
||||
msg_perr("Closing the log file returned error %s\n", strerror(errno));
|
||||
return 1;
|
||||
}
|
||||
logfile = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int open_logfile(const char * const filename)
|
||||
{
|
||||
if (!filename) {
|
||||
msg_gerr("No filename specified.\n");
|
||||
return 1;
|
||||
}
|
||||
if ((logfile = fopen(filename, "w")) == NULL) {
|
||||
perror(filename);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void start_logging(void)
|
||||
{
|
||||
enum msglevel oldverbose_screen = verbose_screen;
|
||||
|
||||
/* Shut up the console. */
|
||||
verbose_screen = MSG_ERROR;
|
||||
print_version();
|
||||
verbose_screen = oldverbose_screen;
|
||||
}
|
||||
#endif /* !STANDALONE */
|
||||
|
||||
/* Please note that level is the verbosity, not the importance of the message. */
|
||||
int print(enum msglevel level, const char *fmt, ...)
|
||||
{
|
||||
@ -32,7 +77,7 @@ int print(enum msglevel level, const char *fmt, ...)
|
||||
if (level == MSG_ERROR)
|
||||
output_type = stderr;
|
||||
|
||||
if (level <= verbose) {
|
||||
if (level <= verbose_screen) {
|
||||
va_start(ap, fmt);
|
||||
ret = vfprintf(output_type, fmt, ap);
|
||||
va_end(ap);
|
||||
@ -42,5 +87,14 @@ int print(enum msglevel level, const char *fmt, ...)
|
||||
if (level != MSG_SPEW)
|
||||
fflush(output_type);
|
||||
}
|
||||
#ifndef STANDALONE
|
||||
if ((level <= verbose_logfile) && logfile) {
|
||||
va_start(ap, fmt);
|
||||
ret = vfprintf(logfile, fmt, ap);
|
||||
va_end(ap);
|
||||
if (level != MSG_SPEW)
|
||||
fflush(logfile);
|
||||
}
|
||||
#endif /* !STANDALONE */
|
||||
return ret;
|
||||
}
|
||||
|
Reference in New Issue
Block a user