Blame SOURCES/0014-Add-more-hexdump-logging-functions.patch

4e0e09
From 707276197e82e852e9d5c7acb97a9348efe467b7 Mon Sep 17 00:00:00 2001
4e0e09
From: Peter Jones <pjones@redhat.com>
4e0e09
Date: Wed, 13 Mar 2019 11:02:01 -0400
4e0e09
Subject: [PATCH 14/63] Add more hexdump logging functions.
4e0e09
4e0e09
Signed-off-by: Peter Jones <pjones@redhat.com>
4e0e09
---
4e0e09
 src/hexdump.h | 30 ++++++++++++++++++++++++++++--
4e0e09
 src/util.h    | 10 ++++++++++
4e0e09
 2 files changed, 38 insertions(+), 2 deletions(-)
4e0e09
4e0e09
diff --git a/src/hexdump.h b/src/hexdump.h
4e0e09
index 4c45cb3732d..f8c32faa9e1 100644
4e0e09
--- a/src/hexdump.h
4e0e09
+++ b/src/hexdump.h
4e0e09
@@ -63,8 +63,12 @@ prepare_text(uint8_t *data, unsigned long size, char *buf)
4e0e09
 	buf[offset] = '\0';
4e0e09
 }
4e0e09
 
4e0e09
+/*
4e0e09
+ * variadic fhexdump formatted
4e0e09
+ * think of it as: fprintf(f, %s%s\n", vformat(fmt, ap), hexdump(data,size));
4e0e09
+ */
4e0e09
 static inline void UNUSED
4e0e09
-hexdump(uint8_t *data, unsigned long size)
4e0e09
+vfhexdumpf(FILE *f, const char * const fmt, uint8_t *data, unsigned long size, va_list ap)
4e0e09
 {
4e0e09
 	unsigned long display_offset = (unsigned long)data & 0xffffffff;
4e0e09
 	unsigned long offset = 0;
4e0e09
@@ -80,11 +84,33 @@ hexdump(uint8_t *data, unsigned long size)
4e0e09
 			return;
4e0e09
 
4e0e09
 		prepare_text(data+offset, size-offset, txtbuf);
4e0e09
-		printf("%016lx  %s  %s\n", display_offset, hexbuf, txtbuf);
4e0e09
+		vfprintf(f, fmt, ap);
4e0e09
+		fprintf(f, "%016lx  %s  %s\n", display_offset, hexbuf, txtbuf);
4e0e09
 
4e0e09
 		display_offset += sz;
4e0e09
 		offset += sz;
4e0e09
 	}
4e0e09
+	fflush(f);
4e0e09
+}
4e0e09
+
4e0e09
+/*
4e0e09
+ * fhexdump formatted
4e0e09
+ * think of it as: fprintf(f, %s%s\n", format(fmt, ...), hexdump(data,size));
4e0e09
+ */
4e0e09
+static inline void UNUSED
4e0e09
+fhexdumpf(FILE *f, const char * const fmt, uint8_t *data, unsigned long size, ...)
4e0e09
+{
4e0e09
+	va_list ap;
4e0e09
+
4e0e09
+	va_start(ap, size);
4e0e09
+	vfhexdumpf(f, fmt, data, size, ap);
4e0e09
+	va_end(ap);
4e0e09
+}
4e0e09
+
4e0e09
+static inline void UNUSED
4e0e09
+hexdump(uint8_t *data, unsigned long size)
4e0e09
+{
4e0e09
+	fhexdumpf(stdout, "", data, size);
4e0e09
 }
4e0e09
 
4e0e09
 #endif /* STATIC_HEXDUMP_H */
4e0e09
diff --git a/src/util.h b/src/util.h
4e0e09
index d98bfa1beed..a6a80e754ec 100644
4e0e09
--- a/src/util.h
4e0e09
+++ b/src/util.h
4e0e09
@@ -400,5 +400,15 @@ swizzle_guid_to_uuid(efi_guid_t *guid)
4e0e09
 #endif
4e0e09
 #define log(level, fmt, args...) log_(__FILE__, __LINE__, __func__, level, fmt, ## args)
4e0e09
 #define debug(fmt, args...) log(LOG_DEBUG, fmt, ## args)
4e0e09
+#define log_hex_(file, line, func, level, buf, size)                    \
4e0e09
+        ({                                                              \
4e0e09
+                if (efi_get_verbose() >= level) {                       \
4e0e09
+                        fhexdumpf(efi_get_logfile(), "%s:%d %s(): ",    \
4e0e09
+                                  (uint8_t *)buf, size,                 \
4e0e09
+                                  file, line, func);                    \
4e0e09
+                }                                                       \
4e0e09
+        })
4e0e09
+#define log_hex(level, buf, size) log_hex_(__FILE__, __LINE__, __func__, level, buf, size)
4e0e09
+#define debug_hex(buf, size) log_hex(LOG_DEBUG, buf, size)
4e0e09
 
4e0e09
 #endif /* EFIVAR_UTIL_H */
4e0e09
-- 
4e0e09
2.26.2
4e0e09