[Toybox] What does the xxd-pipe stuff in tests.tar do?

enh enh at google.com
Tue Aug 17 09:57:53 PDT 2021


wow, i was convinced i didn't write that and it must have been something
you did, but `git blame` disagrees.

hmm... it looks like what happened was that i was trying to preserve the
old use of hd(1)? see the minus lines at the top of this diff:

-export BLOCKS=3
-SUM='head -c $(($BLOCKS*512)) | sha1sum | sed "s/ .*//"'
-[ -n "$TARHD" ] && SUM="tee >(hd >&2) | $SUM"
+
+# Also amount of trailing NUL padding varies (1024 bytes is minimum,
+# gnu/dammit does more) so look at first N 512-byte frames when
+# analyzing header content.
+function SUM()
+{
+  if [ -n "$TARHD" ]; then
+    # (Android's shell doesn't support process substitution.)
+    mkfifo xxd-pipe
+    xxd <xxd-pipe & pid=$!
+    tee xxd-pipe | head -c $(($1*512)) | sha1sum | sed "s/ .*//"
+    rm xxd-pipe
+    wait $pid
+  else
+    head -c $(($1*512)) | sha1sum | sed "s/ .*//"
+  fi
+}

but, yeah, afaict this is just an overly-literal translation of the old
test into something that still works on Android. i think a temporary file
in a snapshot would be fine. (in fact preferable, because my checkin
comment complains that i wish i'd known about TARHD while trying to debug
the tar tests. with a temporary file and stop on error, i wouldn't have
needed to learn anything.)

On Mon, Aug 16, 2021 at 11:37 PM Rob Landley <rob at landley.net> wrote:

> I hit a transient tar bug (https://landley.net/notes-2021.html#06-08-2021)
> I
> couldn't reproduce so I'm trying to redo the SUM plumbing in tar to save a
> snapshot of the raw data and it seems like the OBVIOUS thing to do would
> be:
>
> function SUM()
> {
>   tee save.dat | head -c $(($1*512)) | sha1sum | sed "s/ .*//"
> }
>
> But right NOW it looks like:
>
> function SUM()
> {
>   if [ -n "$TARHD" ]; then
>     # (Android's shell doesn't support process substitution.)
>     mkfifo xxd-pipe
>     xxd <xxd-pipe & pid=$!
>     tee xxd-pipe | head -c $(($1*512)) | sha1sum | sed "s/ .*//"
>     rm xxd-pipe
>     wait $pid
>   else
>     head -c $(($1*512)) | sha1sum | sed "s/ .*//"
>   fi
> }
>
> And... is this actually used, or can it go if I save a snapshot of the
> data for
> later analysis in the "stop when you hit an error" mode which is now the
> default?
>
> Rob
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.landley.net/pipermail/toybox-landley.net/attachments/20210817/5a19ee6a/attachment-0001.htm>


More information about the Toybox mailing list