diff mbox

[3/4] libkmod: modinfo: implement line splitting in hex_to_str

Message ID 20170411121503.26181-4-yauheni.kaliuta@redhat.com (mailing list archive)
State Accepted
Headers show

Commit Message

Yauheni Kaliuta April 11, 2017, 12:15 p.m. UTC
The key output is usually short, but for signature it is more
readable to output it in several lines.

Implement line splitting. Set line limit hardcoded to 20 hex
numbers (not characters).

Signed-off-by: Yauheni Kaliuta <yauheni.kaliuta@redhat.com>
---
 libkmod/libkmod-module.c | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)
diff mbox

Patch

diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c
index 22c8f4c852a2..9e155f080277 100644
--- a/libkmod/libkmod-module.c
+++ b/libkmod/libkmod-module.c
@@ -2197,15 +2197,25 @@  static char *kmod_module_hex_to_str(const char *hex, size_t len)
 {
 	char *str;
 	int i;
+	int j;
+	const size_t line_limit = 20;
+	size_t str_len;
 
-	str = malloc(len * 3);
+	str_len = len * 3; /* XX: or XX\0 */
+	str_len += ((str_len + line_limit - 1) / line_limit - 1) * 3; /* \n\t\t */
+
+	str = malloc(str_len);
 	if (str == NULL)
 		return NULL;
 
-	for (i = 0; i < (int)len; i++) {
-		sprintf(str + i * 3, "%02X", (unsigned char)hex[i]);
-		if (i < (int)len - 1)
-			str[i * 3 + 2] = ':';
+	for (i = 0, j = 0; i < (int)len; i++) {
+		j += sprintf(str + j, "%02X", (unsigned char)hex[i]);
+		if (i < (int)len - 1) {
+			str[j++] = ':';
+
+			if ((i + 1) % line_limit == 0)
+				j += sprintf(str + j, "\n\t\t");
+		}
 	}
 	return str;
 }