diff options
author | Gerald Van Baren <vanbaren@cideas.com> | 2008-01-05 14:52:04 -0500 |
---|---|---|
committer | Gerald Van Baren <vanbaren@cideas.com> | 2008-01-08 15:03:13 -0500 |
commit | ea6d8be153ceaf16958f8009cea6d75f3ff58d92 (patch) | |
tree | 87a68ee393eabc90ec35ac991a775d1753f82b96 | |
parent | 22fb2246df91bfc840d87f0c5910818bad55577a (diff) | |
download | u-boot-imx-ea6d8be153ceaf16958f8009cea6d75f3ff58d92.zip u-boot-imx-ea6d8be153ceaf16958f8009cea6d75f3ff58d92.tar.gz u-boot-imx-ea6d8be153ceaf16958f8009cea6d75f3ff58d92.tar.bz2 |
Support setting FDT properties with optional values.
Fix a bug found and documented by Bartlomiej Sieka where the optional
value on "fdt set <path> <prop> [<val>]" wasn't optional.
=> fdt mknode / testnode
=> fdt print /testnode
testnode {
};
=> fdt set /testnode testprop
=> fdt print /testnode
testnode {
testprop;
};
Signed-off-by: Gerald Van Baren <vanbaren@cideas.com>
-rw-r--r-- | common/cmd_fdt.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/common/cmd_fdt.c b/common/cmd_fdt.c index 4639126..74e28b5 100644 --- a/common/cmd_fdt.c +++ b/common/cmd_fdt.c @@ -184,23 +184,28 @@ int do_fdt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) } else if (argv[1][0] == 's') { char *pathp; /* path */ char *prop; /* property */ - char *newval; /* value from the user (as a string) */ int nodeoffset; /* node offset from libfdt */ static char data[SCRATCHPAD]; /* storage for the property */ int len; /* new length of the property */ int ret; /* return value */ /* - * Parameters: Node path, property, value. + * Parameters: Node path, property, optional value. */ - if (argc < 5) { + if (argc < 4) { printf ("Usage:\n%s\n", cmdtp->usage); return 1; } pathp = argv[2]; prop = argv[3]; - newval = argv[4]; + if (argc == 4) { + len = 0; + } else { + ret = fdt_parse_prop(pathp, prop, argv[4], data, &len); + if (ret != 0) + return ret; + } nodeoffset = fdt_path_offset (fdt, pathp); if (nodeoffset < 0) { @@ -211,9 +216,6 @@ int do_fdt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) fdt_strerror(nodeoffset)); return 1; } - ret = fdt_parse_prop(pathp, prop, newval, data, &len); - if (ret != 0) - return ret; ret = fdt_setprop(fdt, nodeoffset, prop, data, len); if (ret < 0) { |