From: Li Liu <john.li...@huawei.com> dump three kind data types 'strings', 'cell' and 'bytes' of dts to a file desciptor.
Signed-off-by: Li Liu <john.li...@huawei.com> --- device_tree.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/device_tree.c b/device_tree.c index 29d9acc..14d4015 100644 --- a/device_tree.c +++ b/device_tree.c @@ -377,3 +377,42 @@ static int dts_is_printable_strings(const void *data, int len) return substrs && !substr_len; } + +static void dts_write_data(FILE *fp, const char *data, int len) +{ + int i; + const char *p = data; + const char *s; + + if (len == 0) { + return; + } + + if (dts_is_printable_strings(data, len)) { + fprintf(fp, " = "); + + s = data; + do { + fprintf(fp, "\"%s\"", s); + s += strlen(s) + 1; + if (s < data + len) { + fprintf(fp, ", "); + } + } while (s < data + len); + } else if ((len % 4) == 0) { + const uint32_t *cell = (const uint32_t *)data; + + fprintf(fp, " = <"); + for (i = 0; i < len; i += 4) { + fprintf(fp, "0x%x%s", fdt32_to_cpu(cell[i / 4]), + i < (len - 4) ? " " : ""); + } + fprintf(fp, ">"); + } else { + fprintf(fp, " = ["); + for (i = 0; i < len; i++) { + fprintf(fp, "%02hhx%s", *p++, i < len - 1 ? " " : ""); + } + fprintf(fp, "]"); + } +} -- 1.7.9.5