
On Wed, Apr 21, 2021 at 11:56 PM Rasmus Villemoes rasmus.villemoes@prevas.dk wrote:
On 21/04/2021 17.21, Oleksandr Suvorov wrote:
Hi Rasmus,
On Wed, Apr 21, 2021 at 12:34 AM Rasmus Villemoes rasmus.villemoes@prevas.dk wrote:
On 20/04/2021 23.10, Oleksandr Suvorov wrote:
Hi Rasmus,
Thanks for your feedback! Yes, I noted that there were no possible situations with the trailing code != 0x00, but simply removing the additional trailing 0x00 gives us an empty array default_environment[] for the empty defaultenv file. I need to test whether this case is handled in u-boot properly and then prepare the next patch version :P
No, I'm not suggesting removing the trailing nul byte, it very much has to be there - the binary format of the environment is a sequence of nul-terminated C strings of the key=value form, concatenated back-to-back, terminated by an empty string.
(/me saying: never answer at night, never answer at night, never answer at night :-D)
What I'm suggesting is to take the input file
=== foo=bar
# Set our IP address ip=1.2.3.4 ===
do the comment- and empty-line stripping (the two first greps), and then after that add an extra empty line
=== foo=bar ip=1.2.3.4
===
and then feed that to the 'replace \n by nul bytes' | 'delete backslash+nul+whitespace' | xxd pipe. That way there's always that trailing nul on the input to xxd, i.e. in the example above, we would feed foo=bar\0ip-1.2.3.4\0\0 into xxd, while with an initially empty file xxd would just receive that single nul byte.
It's just that I think terminating the sequence of key=value lines by an empty line more exactly matches the binary format.
Sure, now I see. Your solution is more straight and clear. Unfortunately, it doesn't work :)
Yeah, I didn't really expect it to. Ah, it's because "set -e" is in effect, so in
( { grep -v '^#' | grep -v '^$$' ; echo '' ; } | \
the return value of the grep -v '^#' | grep -v '^$$' pipeline is that of the second grep, and when there's no input lines that match (such as, with an empty input file), that's an EXIT_FAILURE. So the whole subshell exits at that point, and nothing gets written to defaultenv_autogenerated.h.
Doing
define filechk_defaultenv.h ( { grep -v '^#' | grep -v '^$$' || true ; echo '' ; } | \ tr '\n' '\0' | \ sed -e 's/\\x0\s*//g' | \ xxd -i ; ) endef
seems to work.
So will you post your own patch?
Rasmus