On 2/7/25 11:31 AM, Rasmus Villemoes wrote:
On Wed, Feb 05 2025, Marek Vasut <ma...@denx.de> wrote:
Add implementation of mkenvimage written purely in bourne shell.
This is not a replacement for mkenvimage tool, but rather a simple
implementation which can be used in environments where mkenvimage
itself cannot be deployed due to various constraints, like hardware
manufacturing plants, but where bourne shell and basic tool are
already available.
The external dependencies which are not shell built-ins are gzip
and grep.
Eh, and cat, sort, dd, tr, mktemp, head, tail, mv and rm ?
A lot of which are shell builtins .
All mkenvimage parameters are implemented and compatible with the
C implementation of mkenvimage.
Signed-off-by: Marek Vasut <ma...@denx.de>
---
Cc: Joe Hershberger <joe.hershber...@ni.com>
Cc: Tom Rini <tr...@konsulko.com>
---
tools/mkenvimage.sh | 126 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 126 insertions(+)
create mode 100755 tools/mkenvimage.sh
diff --git a/tools/mkenvimage.sh b/tools/mkenvimage.sh
new file mode 100755
index 00000000000..f83fac92e5d
--- /dev/null
+++ b/tools/mkenvimage.sh
@@ -0,0 +1,126 @@
+#!/bin/sh
+
+print_help() {
+ echo "mkenvimage [-h] [-V] [-r] [-b] [-p <byte>] -s <environment partition size> -o
<output> <input file>"
Nit: you included a .sh extension in the filename, probably this output
should reflect that.
$0 is even better.
+
+(
+# Read input environment file, make sure there is a trailing newline,
+# sort the result and remove empty and commented out lines.
+( cat "${INFILE}" ; echo ) | sort -u "${INFILE}" | grep -v '^#' | grep -v '^[
\t]*$' | tr '\n' '\0'
Doesn't sort ignore stdin when given file(s) via argv? Also, the newline
added by that echo would probably by removed by the grep, and you
manually insert a \0 right after, so probably the first cat;echo should
just be removed.
Good point
I'm also wondering why you even do that sort; AFAIK, mkenvimage doesn't
do that. And it would make a difference if the input fx had two
definitions for the same variable
foo=Y
foo=X
because when loaded on target, the last occurring value takes
precedence.
Indeed
Are you handling escaping of newlines, in order to allow values to
contain newline characters?
Uh, no, I don't think so. I don't think I even used something like that
with plain C mkenvimage either. Do you have an example input env for me?