Fix dts output with a REF_PATH marker
Commitmain8c59a97ce0
("Fix missing labels when emitting dts format") fixed label output, but broke output when there is a REF_PATH marker. The problem is a REF_PATH marker causes a zero length string to be emitted. The write_propval_string() function requires a length of at least 1 (including the terminating '\0'), but that was not being checked. For the integer output, a length of 0 is valid as it is possible to have labels inside the starting '<': int-prop = < start: 0x1234>; REF_PHANDLE is another marker that we don't explicitly handle, but it doesn't cause a problem as it is fundamentally just an int. Fixes:8c59a97ce0
("Fix missing labels when emitting dts format") Reported-by: Kumar Gala <kumar.gala@linaro.org> Cc: Grant Likely <grant.likely@arm.com> Signed-off-by: Rob Herring <robh@kernel.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
parent
e45198c983
commit
522d81d572
|
@ -16,7 +16,7 @@
|
||||||
foobar {
|
foobar {
|
||||||
n3: baz {
|
n3: baz {
|
||||||
ref = &{/foo/baz};
|
ref = &{/foo/baz};
|
||||||
lref = &n4;
|
lref = start: &n4 end:;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
foo {
|
foo {
|
||||||
|
|
|
@ -572,6 +572,12 @@ dtc_tests () {
|
||||||
run_dtc_test -I dts -O dts $tree.test.dts
|
run_dtc_test -I dts -O dts $tree.test.dts
|
||||||
run_wrap_test cmp $tree $tree.test.dts
|
run_wrap_test cmp $tree $tree.test.dts
|
||||||
done
|
done
|
||||||
|
for tree in path-references; do
|
||||||
|
run_dtc_test -I dts -O dtb -o $tree.test.dtb $tree.dts
|
||||||
|
run_dtc_test -I dts -O dts -o $tree.test.dts $tree.dts
|
||||||
|
run_dtc_test -I dts -O dtb -o $tree.test.dts.test.dtb $tree.test.dts
|
||||||
|
run_test dtbs_equal_ordered $tree.test.dtb $tree.test.dts.test.dtb
|
||||||
|
done
|
||||||
|
|
||||||
# Check -Oyaml output
|
# Check -Oyaml output
|
||||||
if pkg-config --exists yaml-0.1; then
|
if pkg-config --exists yaml-0.1; then
|
||||||
|
|
|
@ -64,6 +64,10 @@ static bool isstring(char c)
|
||||||
static void write_propval_string(FILE *f, const char *s, size_t len)
|
static void write_propval_string(FILE *f, const char *s, size_t len)
|
||||||
{
|
{
|
||||||
const char *end = s + len - 1;
|
const char *end = s + len - 1;
|
||||||
|
|
||||||
|
if (!len)
|
||||||
|
return;
|
||||||
|
|
||||||
assert(*end == '\0');
|
assert(*end == '\0');
|
||||||
|
|
||||||
fprintf(f, "\"");
|
fprintf(f, "\"");
|
||||||
|
|
Loading…
Reference in New Issue