\r
#define FDT_RW_CHECK_HEADER(fdt) \\r
{ \\r
- int err; \\r
- if ((err = _fdt_rw_check_header(fdt)) != 0) \\r
- return err; \\r
+ int __err; \\r
+ if ((__err = _fdt_rw_check_header(fdt)) != 0) \\r
+ return __err; \\r
}\r
\r
static inline int _fdt_data_size(void *fdt)\r
\r
if (((p + oldlen) < p) || ((p + oldlen) > end))\r
return -FDT_ERR_BADOFFSET;\r
+ if ((p < (char *)fdt) || ((end - oldlen + newlen) < (char *)fdt))\r
+ return -FDT_ERR_BADOFFSET;\r
if ((end - oldlen + newlen) > ((char *)fdt + fdt_totalsize(fdt)))\r
return -FDT_ERR_NOSPACE;\r
memmove(p + newlen, p + oldlen, end - p - oldlen);\r
int delta = newlen - oldlen;\r
int err;\r
\r
- err = _fdt_splice(fdt, p, oldlen, newlen);\r
- if (err)\r
+ if ((err = _fdt_splice(fdt, p, oldlen, newlen)))\r
return err;\r
\r
fdt_set_size_dt_struct(fdt, fdt_size_dt_struct(fdt) + delta);\r
+ fdt_off_dt_strings(fdt) + fdt_size_dt_strings(fdt);\r
int err;\r
\r
- err = _fdt_splice(fdt, p, 0, newlen);\r
- if (err)\r
+ if ((err = _fdt_splice(fdt, p, 0, newlen)))\r
return err;\r
\r
fdt_set_size_dt_strings(fdt, fdt_size_dt_strings(fdt) + newlen);\r
int fdt_del_mem_rsv(void *fdt, int n)\r
{\r
struct fdt_reserve_entry *re = _fdt_mem_rsv_w(fdt, n);\r
- int err;\r
\r
FDT_RW_CHECK_HEADER(fdt);\r
\r
if (n >= fdt_num_mem_rsv(fdt))\r
return -FDT_ERR_NOTFOUND;\r
\r
- err = _fdt_splice_mem_rsv(fdt, re, 1, 0);\r
- if (err)\r
- return err;\r
- return 0;\r
+ return _fdt_splice_mem_rsv(fdt, re, 1, 0);\r
}\r
\r
static int _fdt_resize_property(void *fdt, int nodeoffset, const char *name,\r
int err;\r
\r
*prop = fdt_get_property_w(fdt, nodeoffset, name, &oldlen);\r
- if (! (*prop))\r
+ if (!*prop)\r
return oldlen;\r
\r
- err = _fdt_splice_struct(fdt, (*prop)->data, FDT_TAGALIGN(oldlen),\r
- FDT_TAGALIGN(len));\r
- if (err)\r
+ if ((err = _fdt_splice_struct(fdt, (*prop)->data, FDT_TAGALIGN(oldlen),\r
+ FDT_TAGALIGN(len))))\r
return err;\r
\r
(*prop)->len = cpu_to_fdt32(len);\r
return 0;\r
}\r
\r
-int fdt_setprop(void *fdt, int nodeoffset, const char *name,\r
- const void *val, int len)\r
+int fdt_setprop_placeholder(void *fdt, int nodeoffset, const char *name,\r
+ int len, void **prop_data)\r
{\r
struct fdt_property *prop;\r
int err;\r
if (err)\r
return err;\r
\r
- memcpy(prop->data, val, len);\r
+ *prop_data = prop->data;\r
+ return 0;\r
+}\r
+\r
+int fdt_setprop(void *fdt, int nodeoffset, const char *name,\r
+ const void *val, int len)\r
+{\r
+ void *prop_data;\r
+ int err;\r
+\r
+ err = fdt_setprop_placeholder(fdt, nodeoffset, name, len, &prop_data);\r
+ if (err)\r
+ return err;\r
+\r
+ if (len)\r
+ memcpy(prop_data, val, len);\r
return 0;\r
}\r
\r
FDT_RW_CHECK_HEADER(fdt);\r
\r
prop = fdt_get_property_w(fdt, nodeoffset, name, &len);\r
- if (! prop)\r
+ if (!prop)\r
return len;\r
\r
proplen = sizeof(*prop) + FDT_TAGALIGN(len);\r