trivial: Use a more standard _to_string() for FuChunk

This commit is contained in:
Richard Hughes 2021-01-29 09:58:18 +00:00
parent 20e82cac46
commit 451db0645b
3 changed files with 136 additions and 35 deletions

View File

@ -0,0 +1,13 @@
/*
* Copyright (C) 2017 Richard Hughes <richard@hughsie.com>
*
* SPDX-License-Identifier: LGPL-2.1+
*/
#pragma once
#include "fu-chunk.h"
void fu_chunk_add_string (FuChunk *self,
guint idt,
GString *str);

View File

@ -10,7 +10,7 @@
#include <string.h>
#include "fu-chunk.h"
#include "fu-chunk-private.h"
#include "fu-common.h"
/**
@ -285,6 +285,22 @@ fu_chunk_bytes_new (GBytes *bytes)
return self;
}
void
fu_chunk_add_string (FuChunk *self, guint idt, GString *str)
{
fu_common_string_append_kv (str, idt, G_OBJECT_TYPE_NAME (self), NULL);
fu_common_string_append_kx (str, idt + 1, "Index", self->idx);
fu_common_string_append_kx (str, idt + 1, "Page", self->page);
fu_common_string_append_kx (str, idt + 1, "Address", self->address);
if (self->data != NULL) {
g_autofree gchar *datastr = NULL;
datastr = fu_common_strsafe ((const gchar *) self->data, MIN (self->data_sz, 16));
if (datastr != NULL)
fu_common_string_append_kv (str, idt + 1, "Data", datastr);
}
fu_common_string_append_kx (str, idt + 1, "DataSz", self->data_sz);
}
/**
* fu_chunk_to_string:
* @self: a #FuChunk
@ -298,22 +314,9 @@ fu_chunk_bytes_new (GBytes *bytes)
gchar *
fu_chunk_to_string (FuChunk *self)
{
g_autoptr(GString) str = g_string_new (NULL);
if (self->data != NULL) {
for (guint32 i = 0; i < self->data_sz; i++) {
gchar tmp = (gchar) self->data[i];
if (tmp == 0x00)
break;
g_string_append_c (str, g_ascii_isalnum (tmp) ? tmp : '?');
}
}
return g_strdup_printf ("#%02" G_GUINT32_FORMAT ": page:%02x "
"addr:%04x len:%02" G_GUINT32_FORMAT " %s",
self->idx,
(guint) self->page,
(guint) self->address,
self->data_sz,
str->str);
GString *str = g_string_new (NULL);
fu_chunk_add_string (self, 0, str);
return g_string_free (str, FALSE);
}
/**
@ -335,6 +338,8 @@ fu_chunk_array_to_string (GPtrArray *chunks)
g_autofree gchar *tmp = fu_chunk_to_string (chk);
g_string_append_printf (str, "%s\n", tmp);
}
if (str->len > 0)
g_string_truncate (str, str->len - 1);
return g_string_free (str, FALSE);
}

View File

@ -1309,34 +1309,117 @@ fu_chunk_func (void)
chunked3 = fu_chunk_array_new ((const guint8 *) "123456", 6, 0x0, 3, 3);
chunked3_str = fu_chunk_array_to_string (chunked3);
g_print ("\n%s", chunked3_str);
g_assert_cmpstr (chunked3_str, ==, "#00: page:00 addr:0000 len:03 123\n"
"#01: page:01 addr:0000 len:03 456\n");
g_assert_cmpstr (chunked3_str, ==, "FuChunk:\n"
" Index: 0x0\n"
" Page: 0x0\n"
" Address: 0x0\n"
" Data: 123\n"
" DataSz: 0x3\n"
"\n"
"FuChunk:\n"
" Index: 0x1\n"
" Page: 0x1\n"
" Address: 0x0\n"
" Data: 456\n"
" DataSz: 0x3\n");
chunked4 = fu_chunk_array_new ((const guint8 *) "123456", 6, 0x4, 4, 4);
chunked4_str = fu_chunk_array_to_string (chunked4);
g_print ("\n%s", chunked4_str);
g_assert_cmpstr (chunked4_str, ==, "#00: page:01 addr:0000 len:04 1234\n"
"#01: page:02 addr:0000 len:02 56\n");
g_assert_cmpstr (chunked4_str, ==, "FuChunk:\n"
" Index: 0x0\n"
" Page: 0x1\n"
" Address: 0x0\n"
" Data: 1234\n"
" DataSz: 0x4\n"
"\n"
"FuChunk:\n"
" Index: 0x1\n"
" Page: 0x2\n"
" Address: 0x0\n"
" Data: 56\n"
" DataSz: 0x2\n");
chunked1 = fu_chunk_array_new ((const guint8 *) "0123456789abcdef", 16, 0x0, 10, 4);
chunked1_str = fu_chunk_array_to_string (chunked1);
g_print ("\n%s", chunked1_str);
g_assert_cmpstr (chunked1_str, ==, "#00: page:00 addr:0000 len:04 0123\n"
"#01: page:00 addr:0004 len:04 4567\n"
"#02: page:00 addr:0008 len:02 89\n"
"#03: page:01 addr:0000 len:04 abcd\n"
"#04: page:01 addr:0004 len:02 ef\n");
g_assert_cmpstr (chunked1_str, ==, "FuChunk:\n"
" Index: 0x0\n"
" Page: 0x0\n"
" Address: 0x0\n"
" Data: 0123\n"
" DataSz: 0x4\n"
"\n"
"FuChunk:\n"
" Index: 0x1\n"
" Page: 0x0\n"
" Address: 0x4\n"
" Data: 4567\n"
" DataSz: 0x4\n"
"\n"
"FuChunk:\n"
" Index: 0x2\n"
" Page: 0x0\n"
" Address: 0x8\n"
" Data: 89\n"
" DataSz: 0x2\n"
"\n"
"FuChunk:\n"
" Index: 0x3\n"
" Page: 0x1\n"
" Address: 0x0\n"
" Data: abcd\n"
" DataSz: 0x4\n"
"\n"
"FuChunk:\n"
" Index: 0x4\n"
" Page: 0x1\n"
" Address: 0x4\n"
" Data: ef\n"
" DataSz: 0x2\n");
chunked2 = fu_chunk_array_new ((const guint8 *) "XXXXXXYYYYYYZZZZZZ", 18, 0x0, 6, 4);
chunked2_str = fu_chunk_array_to_string (chunked2);
g_print ("\n%s", chunked2_str);
g_assert_cmpstr (chunked2_str, ==, "#00: page:00 addr:0000 len:04 XXXX\n"
"#01: page:00 addr:0004 len:02 XX\n"
"#02: page:01 addr:0000 len:04 YYYY\n"
"#03: page:01 addr:0004 len:02 YY\n"
"#04: page:02 addr:0000 len:04 ZZZZ\n"
"#05: page:02 addr:0004 len:02 ZZ\n");
g_assert_cmpstr (chunked2_str, ==, "FuChunk:\n"
" Index: 0x0\n"
" Page: 0x0\n"
" Address: 0x0\n"
" Data: XXXX\n"
" DataSz: 0x4\n"
"\n"
"FuChunk:\n"
" Index: 0x1\n"
" Page: 0x0\n"
" Address: 0x4\n"
" Data: XX\n"
" DataSz: 0x2\n"
"\n"
"FuChunk:\n"
" Index: 0x2\n"
" Page: 0x1\n"
" Address: 0x0\n"
" Data: YYYY\n"
" DataSz: 0x4\n"
"\n"
"FuChunk:\n"
" Index: 0x3\n"
" Page: 0x1\n"
" Address: 0x4\n"
" Data: YY\n"
" DataSz: 0x2\n"
"\n"
"FuChunk:\n"
" Index: 0x4\n"
" Page: 0x2\n"
" Address: 0x0\n"
" Data: ZZZZ\n"
" DataSz: 0x4\n"
"\n"
"FuChunk:\n"
" Index: 0x5\n"
" Page: 0x2\n"
" Address: 0x4\n"
" Data: ZZ\n"
" DataSz: 0x2\n");
}
static void