]> git.ipfire.org Git - thirdparty/kmod.git/commitdiff
libkmod: modinfo: implement line splitting in hex_to_str
authorYauheni Kaliuta <yauheni.kaliuta@redhat.com>
Tue, 11 Apr 2017 12:15:02 +0000 (15:15 +0300)
committerLucas De Marchi <lucas.demarchi@intel.com>
Tue, 11 Apr 2017 16:04:28 +0000 (09:04 -0700)
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

index 22c8f4c852a21e2486fe85d05d8e39d2d4e9647f..9e155f08027734dc7828da634122e6f5c56ade64 100644 (file)
@@ -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;
 }