summaryrefslogtreecommitdiffstats
path: root/cli_output.c
diff options
context:
space:
mode:
Diffstat (limited to 'cli_output.c')
-rw-r--r--cli_output.c31
1 files changed, 27 insertions, 4 deletions
diff --git a/cli_output.c b/cli_output.c
index e12446d50..e5b829a7d 100644
--- a/cli_output.c
+++ b/cli_output.c
@@ -24,7 +24,6 @@
enum flashrom_log_level verbose_screen = FLASHROM_MSG_INFO;
enum flashrom_log_level verbose_logfile = FLASHROM_MSG_DEBUG2;
-#ifndef STANDALONE
static FILE *logfile = NULL;
int close_logfile(void)
@@ -64,7 +63,31 @@ void start_logging(void)
print_version();
verbose_screen = oldverbose_screen;
}
-#endif /* !STANDALONE */
+
+static const char *flashrom_progress_stage_to_string(enum flashrom_progress_stage stage)
+{
+ if (stage == FLASHROM_PROGRESS_READ)
+ return "READ";
+ if (stage == FLASHROM_PROGRESS_WRITE)
+ return "WRITE";
+ if (stage == FLASHROM_PROGRESS_ERASE)
+ return "ERASE";
+ return "UNKNOWN";
+}
+
+void flashrom_progress_cb(struct flashrom_flashctx *flashctx)
+{
+ struct flashrom_progress *progress_state = flashctx->progress_state;
+ unsigned int pc = 0;
+ unsigned int *percentages = progress_state->user_data;
+ if (progress_state->current > 0 && progress_state->total > 0)
+ pc = ((unsigned long long) progress_state->current * 10000llu) /
+ ((unsigned long long) progress_state->total * 100llu);
+ if (percentages[progress_state->stage] != pc) {
+ percentages[progress_state->stage] = pc;
+ msg_ginfo("[%s] %u%% complete... ", flashrom_progress_stage_to_string(progress_state->stage), pc);
+ }
+}
/* Please note that level is the verbosity, not the importance of the message. */
int flashrom_print_cb(enum flashrom_log_level level, const char *fmt, va_list ap)
@@ -85,13 +108,13 @@ int flashrom_print_cb(enum flashrom_log_level level, const char *fmt, va_list ap
if (level != FLASHROM_MSG_SPEW)
fflush(output_type);
}
-#ifndef STANDALONE
+
if ((level <= verbose_logfile) && logfile) {
ret = vfprintf(logfile, fmt, logfile_args);
if (level != FLASHROM_MSG_SPEW)
fflush(logfile);
}
-#endif /* !STANDALONE */
+
va_end(logfile_args);
return ret;
}