From edb16b86ac3695e05863d411fafc49d4ac7c49c7 Mon Sep 17 00:00:00 2001
From: magnum <magnum>
Date: Fri, 7 Oct 2011 10:03:28 +0200
Subject: [PATCH 21/22] j7: Fixes for AlwaysShowUTF8

---
 src/loader.c |   19 +++++++++++++------
 src/logger.c |    2 +-
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/src/loader.c b/src/loader.c
index 358fe79..c8f2052 100644
--- a/src/loader.c
+++ b/src/loader.c
@@ -27,6 +27,7 @@
 #include "formats.h"
 #include "loader.h"
 #include "options.h"
+#include "config.h"
 #ifdef HAVE_MPI
 #include "john-mpi.h"
 #endif
@@ -947,21 +948,27 @@ static void ldr_show_pw_line(struct db_main *db, char *line)
 
 	show = !(db->options->flags & DB_PLAINTEXTS);
 
-	if (!options.utf8 && !options.store_utf8 && options.report_utf8) {
-		login = (char*)enc_to_utf8_r(login, utf8login, LINE_BUFFER_SIZE);
-		enc_to_utf8_r(source, utf8source, LINE_BUFFER_SIZE);
-		strnzcpy(source, (char*)utf8source, sizeof(source));
-	}
-
 	if (format) {
 		split = format->methods.split;
 		unify = format->params.flags & FMT_SPLIT_UNIFIES_CASE;
+		if (format->params.flags & FMT_UNICODE)
+			options.store_utf8 = cfg_get_bool(SECTION_OPTIONS,
+			    NULL, "UnicodeStoreUTF8", 0);
+		else
+			options.store_utf8 = cfg_get_bool(SECTION_OPTIONS,
+			    NULL, "CPstoreUTF8", 0);
 	} else {
 		split = fmt_default_split;
 		count = 1;
 		unify = 0;
 	}
 
+	if (!options.utf8 && !options.store_utf8 && options.report_utf8) {
+		login = (char*)enc_to_utf8_r(login, utf8login, LINE_BUFFER_SIZE);
+		enc_to_utf8_r(source, utf8source, LINE_BUFFER_SIZE);
+		strnzcpy(source, (char*)utf8source, sizeof(source));
+	}
+
 	if (!*ciphertext) {
 		found = 1;
 		if (show) printf("%s%cNO PASSWORD", login, db->options->field_sep_char);
diff --git a/src/logger.c b/src/logger.c
index 86ed40c..c71d033 100644
--- a/src/logger.c
+++ b/src/logger.c
@@ -185,7 +185,7 @@ void log_guess(char *login, char *ciphertext, char *rep_plain, char *store_plain
 
 	// This is because printf("%-16s") does not line up multibyte UTF-8.
 	// We need to count characters, not octets.
-	if (options.utf8 || (!options.utf8 && options.report_utf8))
+	if (options.utf8 || options.report_utf8)
 		len = strlen8((UTF8*)rep_plain);
 	else
 		len = strlen(rep_plain);
-- 
1.7.4.1

