
Hi Ken,
Ken MacLeod wrote:
Commit 4abd844d8e extended the fdt command parser to handle property strings which are split across multiple arguments but it was broken for byte streams and strings. This patch fixes those.
Signed-off-by: Ken MacLeod ken@bitsko.slc.ut.us
Thanks for the patch. Andy's patch 4abd844d8e says... ----------------------------------------------------------------------- While I was in there, I extended the fdt command parser to handle property strings which are split across multiple arguments:
fdt set /ethernet@f00 interrupts < 33 2 34 2 36 2 > fdt p /ethernet@f00
ethernet@f00 { interrupts = <0x21 0x2 0x22 0x2 0x24 0x2>; }; -----------------------------------------------------------------------
If understand Andy's changes correctly, what use to be fdt set /ethernet@f00 interrupts "<33 2 34 2 36 2>" is now fdt set /ethernet@f00 interrupts < 33 2 34 2 36 2 >
and you carried this forward to handle byte streams: fdt set /ethernet@f00 interrupts "[33 2 34 2 36 2]" becomes fdt set /ethernet@f00 interrupts [ 33 2 34 2 36 2 ] and fdt set /ethernet@f00 interrupts "this is a string" can now handle multiple strings (words) by concatenating them with spaces (quoted strings still work the same as before because of hush's argument parsing) fdt set /ethernet@f00 interrupts this is a string
Best regards, gvb
common/cmd_fdt.c | 11 +++++++++-- 1 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/common/cmd_fdt.c b/common/cmd_fdt.c index 8683772..f0a8f0e 100644 --- a/common/cmd_fdt.c +++ b/common/cmd_fdt.c @@ -580,7 +580,7 @@ static int fdt_parse_prop(char **newval, int count, char *data, int *len) *len = *len + 1; while (*newp == ' ') newp++;
if (*newp != '\0')
} if (*newp != ']') {if (*newp == '\0') newp = newval[++stridx];
@@ -593,10 +593,17 @@ static int fdt_parse_prop(char **newval, int count, char *data, int *len) * convenience (including the terminating '\0'). */ while (stridx < count) {
*len = strlen(newp) + 1;
size_t length = strlen(newp); strcpy(data, newp);
data += length;
*len += length; newp = newval[++stridx];
if (stridx < count) {
*data++ = ' ';
*len += 1;
}}
} return 0;*len += 1;
}