[U-Boot] escape sequence issue
Frans Meulenbroeks
fransmeulenbroeks at gmail.com
Fri Dec 2 09:55:54 CET 2011
Hi,
I noticed the following (in 2011.03)
If I do this on the u-boot cmd line:
setenv tst "setexpr.b mode *1000 \& 0xe8"
and I do a
printenv tst
I get:
tst=setexpr.b mode *1000 \& 0xe8
Note: one slash.
But if I do a printenv without argument I get
tst=setexpr.b mode *1000 \\& 0xe8
Note the two slashes.
Reason is that printenv when reading one entry directly fetches it from the
hash table; no processing of escape sequences is done, while printenv uses
hexport_r (or so) which does replace all \ with \\
Not sure what the best solution is to resolve this (so no patch)
Perhaps printenv should not use hexport_r, or maybe hexport_r should have
an additional argument whether or not to escape backslashes.
It would be nice to have a consistent output though (and preferably one
with only one \ as that is what has been entered in the setenv and what one
expects to see when doing a printenv.
There is one other thing to consider.
I want to have this in my default env, so I wanted to add this to
CONFIG_EXTRA_ENV_SETTINGS
and it would become something like
"tst=setexpr.b mode *1000 \& 0xe8\0"
Unfortunately this does not work. as the \& is interpreted by cpp. This of
course suggests using \\&
Alas this did not work either. In env_common.o I see a \&, but when
importing the env himport_r (if I recall the name correctly) also
interprets escapes, so in the end I ended up with:
"tst=setexpr.b mode *1000 \\\\& 0xe8\0"
Which did the trick.
Is it desired to have escape sequence handling while importing the ENV
default settings. Personally I'm inclined to say no. I can understand that
cpp eats up a \ but it is somewhat hard to understand that if one on the
cmd line types a cmd with a single \ it should become \\\\ in the default
env.
Best regards, Frans.
PS: please keep me on cc as I am not on the list)
More information about the U-Boot
mailing list