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



Reply via email to