diff options
Diffstat (limited to 'libfdt/fdt_overlay.c')
-rw-r--r-- | libfdt/fdt_overlay.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/libfdt/fdt_overlay.c b/libfdt/fdt_overlay.c index 644d16b..90b9e05 100644 --- a/libfdt/fdt_overlay.c +++ b/libfdt/fdt_overlay.c @@ -710,7 +710,7 @@ static int copy_node(void *fdt, void *fdto, int fdt_parent, } fdt_for_each_property_offset(prop, fdto, fdto_child) { - int ret; + int ret, fdt_len = 0; const char *value, *pname; void *p; @@ -718,6 +718,9 @@ static int copy_node(void *fdt, void *fdto, int fdt_parent, if (!value) return len; + if (fdt_getprop(fdt, parent, pname, &fdt_len)) + len += fdt_len; + ret = fdt_setprop_placeholder(fdt, parent, pname, len, &p); vvdprintf ("%s: +setprop: In fdt-parent-node(%s), add fdto-prop(%s), " @@ -726,6 +729,13 @@ static int copy_node(void *fdt, void *fdto, int fdt_parent, if (ret) return ret; + if (fdt_len > 0) { + p = (char *)p + fdt_len; + len -= fdt_len; + vvdprintf("%s: fdto-prop(%s): Copy only new values\n", + __func__, pname); + } + memcpy(p, value, len); } |