]> granicus.if.org Git - zfs/commitdiff
ZTS: Fix zfs_diff_timestamp
authorLOLi <loli10K@users.noreply.github.com>
Mon, 7 May 2018 03:42:29 +0000 (05:42 +0200)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Mon, 7 May 2018 03:42:29 +0000 (20:42 -0700)
When using mawk instead of gawk zfs_diff_timestamp fails consistently:
this is due to a subtle difference in how mawk handles substr().

From awk(1):
---
Finally, here is how mawk handles exceptional cases not discussed in
the AWK book or the Posix draft.  It is unsafe to assume consistency
across awks and safe to skip to the next section.
substr(s,  i,  n) returns the characters of s in the intersection of
the closed interval [1, length(s)] and the half-open interval [i, i+n).
When this intersection is empty, the empty string is returned; so
substr("ABC", 1, 0) = "" and substr("ABC", -4, 6) = "A".
---

To support running zfs_diff_timestamp with both gawk and mawk change
the second parameter passed to substr().

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: loli10K <ezomori.nozomu@gmail.com>
Closes #7503
Closes #7510

tests/zfs-tests/tests/functional/cli_root/zfs_diff/zfs_diff_timestamp.ksh

index 513d14c8df1dacb304c29773c421979056ddbe24..55dd8b66f6499785334382b26d683ec731783681 100755 (executable)
@@ -75,7 +75,7 @@ log_must zfs snapshot "$TESTSNAP2"
 # 3. Verify 'zfs diff -t' correctly display timestamps
 typeset -i count=0
 log_must eval "zfs diff -t $TESTSNAP1 $TESTSNAP2 > $FILEDIFF"
-awk '{print substr($1,0,index($1,".")-1)" "$NF}' < "$FILEDIFF" | while read line
+awk '{print substr($1,1,index($1,".")-1)" "$NF}' < "$FILEDIFF" | while read line
 do
        read ctime file <<< "$line"