From: Li Liu <john.li...@huawei.com> dts property's value can be multiple strings. So introduce a function to check a data with a given length to see if it is all printable and has a valid terminator. It can contain either a single string, or multiple strings each of non-zero length.
Signed-off-by: Li Liu <john.li...@huawei.com> --- device_tree.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/device_tree.c b/device_tree.c index ca83504..29d9acc 100644 --- a/device_tree.c +++ b/device_tree.c @@ -345,3 +345,35 @@ int qemu_fdt_setprop_sized_cells_from_array(void *fdt, return qemu_fdt_setprop(fdt, node_path, property, propcells, cellnum * sizeof(uint32_t)); } + +/* + * Check a data of a given length to see if it is all printable and + * has a valid terminator. The data can contain either a single string, + * or multiple strings each of non-zero length. + */ +static int dts_is_printable_strings(const void *data, int len) +{ + const char *str = (char *)data; + int substrs = 0; + int substr_len = 0; + int i; + + for (i = 0; i < len; i++) { + if (str[i] == '\0') { + if (substr_len) { + substr_len = 0; + substrs++; + continue; + } else { + /* substr is empty */ + return 0; + } + } else if (isprint(str[i])) { + substr_len++; + } else { + return 0; + } + } + + return substrs && !substr_len; +} -- 1.7.9.5