* tests/sample-test: Use framework_error_ rather than fail=1 * tests/chown/deref.sh: Likewise. * tests/chown/preserve-root.sh: Likewise. * tests/cp/src-base-dot.sh: Likewise. * tests/dd/unblock-sync.sh: Likewise. * tests/du/2g.sh: Likewise. * tests/du/inacc-dest.sh: Likewise. * tests/du/one-file-system.sh: Likewise. * tests/fmt/goal-option.sh: Likewise. * tests/ln/hard-backup.sh: Likewise. * tests/ls/color-dtype-dir.sh: Likewise. * tests/ls/m-option.sh: Likewise. * tests/ls/stat-dtype.sh: Likewise. * tests/ls/time-style-diag.sh: Likewise. * tests/ls/x-option.sh: Likewise. * tests/misc/chcon.sh: Likewise. * tests/misc/nohup.sh: Likewise. * tests/misc/od-N.sh: Likewise. * tests/misc/sort-compress.sh: Likewise. * tests/misc/tac-continue.sh: Likewise. * tests/misc/time-style.sh: Likewise. * tests/mv/backup-dir.sh: Likewise. * tests/mv/dir2dir.sh: Likewise. * tests/rm/dir-no-w.sh: Likewise. * tests/rm/dir-nonrecur.sh: Likewise. * tests/rm/inaccessible.sh: Likewise. * tests/rm/interactive-always.sh: Likewise. * tests/rm/interactive-once.sh: Likewise. * tests/rm/rm3.sh: Likewise. * tests/rm/v-slash.sh: Likewise. * tests/touch/relative.sh: Likewise. --- tests/chown/deref.sh | 2 +- tests/chown/preserve-root.sh | 6 +++--- tests/cp/src-base-dot.sh | 6 +----- tests/dd/unblock-sync.sh | 2 +- tests/du/2g.sh | 2 +- tests/du/inacc-dest.sh | 2 +- tests/du/one-file-system.sh | 12 ++++++------ tests/fmt/goal-option.sh | 4 ++-- tests/ln/hard-backup.sh | 2 +- tests/ls/color-dtype-dir.sh | 10 +++++----- tests/ls/m-option.sh | 2 +- tests/ls/stat-dtype.sh | 5 ++--- tests/ls/time-style-diag.sh | 2 +- tests/ls/x-option.sh | 2 +- tests/misc/chcon.sh | 4 ++-- tests/misc/nohup.sh | 4 ++-- tests/misc/od-N.sh | 2 +- tests/misc/sort-compress.sh | 2 +- tests/misc/tac-continue.sh | 2 +- tests/misc/time-style.sh | 6 +++--- tests/mv/backup-dir.sh | 2 +- tests/mv/dir2dir.sh | 2 +- tests/rm/dir-no-w.sh | 2 +- tests/rm/dir-nonrecur.sh | 2 +- tests/rm/inaccessible.sh | 2 +- tests/rm/interactive-always.sh | 8 ++++---- tests/rm/interactive-once.sh | 6 ++---- tests/rm/rm3.sh | 6 +++--- tests/rm/v-slash.sh | 2 +- tests/sample-test | 2 +- tests/touch/relative.sh | 2 +- 31 files changed, 54 insertions(+), 61 deletions(-)
diff --git a/tests/chown/deref.sh b/tests/chown/deref.sh index 4c8628d..87c2027 100755 --- a/tests/chown/deref.sh +++ b/tests/chown/deref.sh @@ -29,7 +29,7 @@ set _ $(ls -ldo dangle); shift; user=$3 chown --dereference $user dangle 2> out1 && fail=1 sed 's/: [^:]*$//' out1 > out -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ chown: cannot dereference 'dangle' EOF diff --git a/tests/chown/preserve-root.sh b/tests/chown/preserve-root.sh index 76d0a3f..d5c370f 100755 --- a/tests/chown/preserve-root.sh +++ b/tests/chown/preserve-root.sh @@ -37,16 +37,16 @@ chmod -R --preserve-root u+r / >> out 2>&1 && fail=1 # With -RHh, --preserve-root should trigger nothing, # since the symlink in question is not a command line argument. # Contrary to the above commands, these two should succeed. -echo '==== test -RHh' >> out +echo '==== test -RHh' >> out || framework_failure_ chown -RHh --preserve-root $(id -u) d >> out 2>&1 || fail=1 chgrp -RHh --preserve-root $(id -g) d >> out 2>&1 || fail=1 # These must fail. -echo '==== test -RLh' >> out +echo '==== test -RLh' >> out || framework_failure_ chown -RLh --preserve-root $(id -u) d >> out 2>&1 && fail=1 chgrp -RLh --preserve-root $(id -g) d >> out 2>&1 && fail=1 -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ chown: it is dangerous to operate recursively on '/' chown: use --no-preserve-root to override this failsafe chgrp: it is dangerous to operate recursively on '/' diff --git a/tests/cp/src-base-dot.sh b/tests/cp/src-base-dot.sh index dfa3acd..7acd5de 100755 --- a/tests/cp/src-base-dot.sh +++ b/tests/cp/src-base-dot.sh @@ -21,12 +21,8 @@ print_ver_ cp mkdir x y || framework_failure_ - cd y cp --verbose -ab ../x/. . > out 2>&1 || fail=1 -cat <<\EOF > exp || fail=1 -EOF - -compare exp out || fail=1 +compare /dev/null out || fail=1 Exit $fail diff --git a/tests/dd/unblock-sync.sh b/tests/dd/unblock-sync.sh index 0ae6442..4c0786b 100755 --- a/tests/dd/unblock-sync.sh +++ b/tests/dd/unblock-sync.sh @@ -23,7 +23,7 @@ printf 000100020003xx > in || framework_failure_ dd cbs=4 ibs=4 conv=unblock,sync < in > out 2> /dev/null || fail=1 -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ 0001 0002 0003 diff --git a/tests/du/2g.sh b/tests/du/2g.sh index e3045b3..3a74d2f 100755 --- a/tests/du/2g.sh +++ b/tests/du/2g.sh @@ -62,7 +62,7 @@ du -k $big > out1 || fail=1 rm -f $big sed 's/^2[0-9][0-9][0-9][0-9][0-9][0-9] '$big'$/~2M/' out1 > out -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ ~2M EOF diff --git a/tests/du/inacc-dest.sh b/tests/du/inacc-dest.sh index 2d54397..f9144ba 100755 --- a/tests/du/inacc-dest.sh +++ b/tests/du/inacc-dest.sh @@ -33,7 +33,7 @@ du > ../t 2>&1 && fail=1 # /proc support, nor native openat support. sed 's/^[0-9][0-9]* //' ../t | sort -u > out -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ . ./a ./b diff --git a/tests/du/one-file-system.sh b/tests/du/one-file-system.sh index e21c90c..7c6436a 100755 --- a/tests/du/one-file-system.sh +++ b/tests/du/one-file-system.sh @@ -28,8 +28,8 @@ ln -s "$other_partition_tmpdir/x" d || framework_failure_ # would not traverse into second and subsequent directories listed # on the command line. du -ax b y > t || fail=1 -sed 's/^[0-9][0-9]* //' t > out -cat <<\EOF > exp || fail=1 +sed 's/^[0-9][0-9]* //' t > out || framework_failure_ +cat <<\EOF > exp || framework_failure_ b/c b y/z @@ -41,16 +41,16 @@ compare exp out || fail=1 # "du -xL" reported a zero count for a file in a different file system, # instead of ignoring it. du -xL d > u || fail=1 -sed 's/^[0-9][0-9]* //' u > out1 -echo d > exp1 || fail=1 +sed 's/^[0-9][0-9]* //' u > out1 || framework_failure_ +echo d > exp1 || framework_failure_ compare exp1 out1 || fail=1 # With coreutils-8.15, "du -xs FILE" would print no output. touch f for opt in -x -xs; do du $opt f > u || fail=1 - sed 's/^[0-9][0-9]* //' u > out2 - echo f > exp2 || fail=1 + sed 's/^[0-9][0-9]* //' u > out2 || framework_failure_ + echo f > exp2 || framework_failure_ compare exp2 out2 || fail=1 done diff --git a/tests/fmt/goal-option.sh b/tests/fmt/goal-option.sh index 1ebf714..eda086b 100755 --- a/tests/fmt/goal-option.sh +++ b/tests/fmt/goal-option.sh @@ -19,7 +19,7 @@ . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src print_ver_ fmt -cat <<\_EOF_ > base || fail=1 +cat <<\_EOF_ > base || framework_failure_ @command{fmt} prefers breaking lines at the end of a sentence, and tries to avoid line breaks after the first word of a sentence or before the last word @@ -36,7 +36,7 @@ _EOF_ fmt -g 60 -w 72 base > out || fail=1 -cat <<\_EOF_ > exp +cat <<\_EOF_ > exp || framework_failure_ @command{fmt} prefers breaking lines at the end of a sentence, and tries to avoid line breaks after the first word of a sentence diff --git a/tests/ln/hard-backup.sh b/tests/ln/hard-backup.sh index a983292..53e5917 100755 --- a/tests/ln/hard-backup.sh +++ b/tests/ln/hard-backup.sh @@ -23,7 +23,7 @@ touch f || framework_failure_ ln --backup f f 2> out && fail=1 -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ ln: 'f' and 'f' are the same file EOF diff --git a/tests/ls/color-dtype-dir.sh b/tests/ls/color-dtype-dir.sh index dc5f2db..6a71bb9 100755 --- a/tests/ls/color-dtype-dir.sh +++ b/tests/ls/color-dtype-dir.sh @@ -31,10 +31,10 @@ chmod o+t sticky || framework_failure_ TERM=xterm ls --color=always > out || fail=1 -cat -A out > o1 || fail=1 -mv o1 out || fail=1 +cat -A out > o1 || framework_failure_ +mv o1 out || framework_failure_ -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ ^[[0m^[[01;34md^[[0m$ ^[[34;42mother-writable^[[0m$ out$ @@ -43,7 +43,7 @@ EOF compare exp out || fail=1 -rm exp +rm exp || framework_failure_ # Turn off colors for other-writable dirs and ensure # we fall back to the color for standard directories. @@ -52,7 +52,7 @@ LS_COLORS="ow=:" ls --color=always > out || fail=1 cat -A out > o1 || fail=1 mv o1 out || fail=1 -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ ^[[0m^[[01;34md^[[0m$ ^[[01;34mother-writable^[[0m$ out$ diff --git a/tests/ls/m-option.sh b/tests/ls/m-option.sh index b6e7743..275ab43 100755 --- a/tests/ls/m-option.sh +++ b/tests/ls/m-option.sh @@ -29,7 +29,7 @@ ls -w2 -m a b > out || fail=1 # Before coreutils-5.1.1, the following would produce leading white space. # All of the sed business is because the sizes are not portable. ls -sm a b | sed 's/^[0-9]/0/;s/, [0-9][0-9]* b/, 12 b/' >> out || fail=1 -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ a, b 0 a, 12 b diff --git a/tests/ls/stat-dtype.sh b/tests/ls/stat-dtype.sh index dbd0e31..550856c 100755 --- a/tests/ls/stat-dtype.sh +++ b/tests/ls/stat-dtype.sh @@ -42,19 +42,18 @@ chmod 600 e || framework_failure_ ls --file-type d > out || fail=1 -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ s@ EOF compare exp out || fail=1 -rm -f out exp # Check for the ls -CF misaligned-columns bug: ls -CF e > out || fail=1 # coreutils-6.0 would print two spaces after the first slash, # rather than the appropriate TAB. -printf 'a2345/\tb/\n' > exp || fail=1 +printf 'a2345/\tb/\n' > exp || framework_failure_ compare exp out || fail=1 diff --git a/tests/ls/time-style-diag.sh b/tests/ls/time-style-diag.sh index 00c04dd..2c67021 100755 --- a/tests/ls/time-style-diag.sh +++ b/tests/ls/time-style-diag.sh @@ -21,7 +21,7 @@ print_ver_ ls returns_ 2 ls -l --time-style=XX > out 2> err || fail=1 -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ ls: invalid argument 'XX' for 'time style' Valid arguments are: - [posix-]full-iso diff --git a/tests/ls/x-option.sh b/tests/ls/x-option.sh index e4ee8bb..224d2b3 100755 --- a/tests/ls/x-option.sh +++ b/tests/ls/x-option.sh @@ -27,7 +27,7 @@ touch subdir/a || framework_failure_ # Coreutils 6.8 and 6.9 would output this in the wrong order. ls -x subdir > out || fail=1 ls -rx subdir >> out || fail=1 -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ a b b a EOF diff --git a/tests/misc/chcon.sh b/tests/misc/chcon.sh index c9c42f0..13a72a0 100755 --- a/tests/misc/chcon.sh +++ b/tests/misc/chcon.sh @@ -57,7 +57,7 @@ for i in -u$u1 -r$r1 -t$t1; do stat --printf="f|$i|"'%C\n' f >> out || fail=1 done -cat <<EOF > exp || fail=1 +cat <<EOF > exp || framework_failure_ f|$ctx g|$ctx f|--user=$u2|$u2:$r1:$t1:$range @@ -72,7 +72,7 @@ EOF compare exp out || fail=1 chcon --verbose -u$u1 f > out || fail=1 -echo "changing security context of 'f'" > exp +echo "changing security context of 'f'" > exp || framework_failure_ compare exp out || fail=1 Exit $fail diff --git a/tests/misc/nohup.sh b/tests/misc/nohup.sh index eae1cd0..0557889 100755 --- a/tests/misc/nohup.sh +++ b/tests/misc/nohup.sh @@ -88,7 +88,7 @@ if test -t 1; then compare /dev/null nohup.out || fail=1 fi -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ nohup: appending output to 'nohup.out' nohup: cannot run command 'no-such-command': No such file or directory EOF @@ -108,7 +108,7 @@ if test -t 1; then compare /dev/null nohup.out || fail=1 fi -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ nohup: appending output to 'nohup.out' nohup: cannot run command './k': Permission denied EOF diff --git a/tests/misc/od-N.sh b/tests/misc/od-N.sh index f05b1c7..fcf0730 100755 --- a/tests/misc/od-N.sh +++ b/tests/misc/od-N.sh @@ -23,7 +23,7 @@ echo abcdefg > in || framework_failure_ (od -An -N3 -c; od -An -N3 -c) < in > out -cat <<EOF > exp || fail=1 +cat <<EOF > exp || framework_failure_ a b c d e f EOF diff --git a/tests/misc/sort-compress.sh b/tests/misc/sort-compress.sh index 82b585f..91fad43 100755 --- a/tests/misc/sort-compress.sh +++ b/tests/misc/sort-compress.sh @@ -28,7 +28,7 @@ sort -S 1k in > out || fail=1 compare exp out || fail=1 # Create our own gzip program that will be used as the default -cat <<EOF > gzip || fail=1 +cat <<EOF > gzip || framework_failure_ #!$SHELL tr 41 14 touch ok diff --git a/tests/misc/tac-continue.sh b/tests/misc/tac-continue.sh index 44cd98b..dca6b6c 100755 --- a/tests/misc/tac-continue.sh +++ b/tests/misc/tac-continue.sh @@ -63,7 +63,7 @@ mkfifo_or_skip_ fifo seq 1000 > fifo & pid=$! TMPDIR=$FULL_PARTITION_TMPDIR tac fifo in >out 2>err && fail=1 -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ 5 4 3 diff --git a/tests/misc/time-style.sh b/tests/misc/time-style.sh index ec1d4ab..1a88dc6 100755 --- a/tests/misc/time-style.sh +++ b/tests/misc/time-style.sh @@ -42,7 +42,7 @@ sed 's/[^ ]* //' duout >dued || framework_failure_ sed 's/[^ ]* *[^ ]* *[^ ]* *[^ ]* *//' lsout >lsed || framework_failure_ sed '/^$/d' prout >pred || framework_failure_ -cat <<\EOF > duexp || fail=1 +cat <<\EOF > duexp || framework_failure_ 1970-07-08 09:10:11.000000000 +0000 a 1970-07-08 09:10 a 1970-07-08 a @@ -65,7 +65,7 @@ cat <<\EOF > duexp || fail=1 %bJul%bJul a EOF -cat <<\EOF > lsexp || fail=1 +cat <<\EOF > lsexp || framework_failure_ 1970-07-08 09:10:11.000000000 +0000 a 1970-07-08 09:10 a 1970-07-08 a @@ -92,7 +92,7 @@ Jul 8 1970 a %bJul%bJul a EOF -cat <<\EOF > prexp || fail=1 +cat <<\EOF > prexp || framework_failure_ +1970-07-08 09:10:11 +0000 (UTC) a Page 1 hello +%bJul%bJul a Page 1 diff --git a/tests/mv/backup-dir.sh b/tests/mv/backup-dir.sh index 497384e..7263afe 100755 --- a/tests/mv/backup-dir.sh +++ b/tests/mv/backup-dir.sh @@ -25,7 +25,7 @@ touch X Y || framework_failure_ # Before coreutils-6.2, the " (backup: 'B.~1~')" suffix was not printed. mv --verbose --backup=numbered -T A B > out || fail=1 -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ renamed 'A' -> 'B' (backup: 'B.~1~') EOF diff --git a/tests/mv/dir2dir.sh b/tests/mv/dir2dir.sh index be10691..de97abb 100755 --- a/tests/mv/dir2dir.sh +++ b/tests/mv/dir2dir.sh @@ -33,7 +33,7 @@ mv b/t a 2> out && fail=1 sed 's/: File exists/: Directory not empty/'<out>o1;mv o1 out sed 's/: Device or resource busy/: Directory not empty/'<out>o1;mv o1 out -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ mv: cannot move 'b/t' to 'a/t': Directory not empty EOF diff --git a/tests/rm/dir-no-w.sh b/tests/rm/dir-no-w.sh index 23124d0..8afc994 100755 --- a/tests/rm/dir-no-w.sh +++ b/tests/rm/dir-no-w.sh @@ -25,7 +25,7 @@ mkdir --mode=0500 unwritable-dir || framework_failure_ # For rm from coreutils-5.0.1, this would prompt. rm ---presume-input-tty unwritable-dir < /dev/null > out-t 2>&1 && fail=1 -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ rm: cannot remove 'unwritable-dir': Is a directory EOF diff --git a/tests/rm/dir-nonrecur.sh b/tests/rm/dir-nonrecur.sh index a99184e..e9bda6e 100755 --- a/tests/rm/dir-nonrecur.sh +++ b/tests/rm/dir-nonrecur.sh @@ -24,7 +24,7 @@ mkdir d || framework_failure_ rm d 2> out && fail=1 -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ rm: cannot remove 'd': Is a directory EOF diff --git a/tests/rm/inaccessible.sh b/tests/rm/inaccessible.sh index dfb7c4d..8d8469f 100755 --- a/tests/rm/inaccessible.sh +++ b/tests/rm/inaccessible.sh @@ -34,7 +34,7 @@ set +x test -d "$p/abs1" && fail=1 test -d "$p/abs2" && fail=1 -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ rm: cannot remove 'rel': Permission denied EOF diff --git a/tests/rm/interactive-always.sh b/tests/rm/interactive-always.sh index 6ed07db..d287ae1 100755 --- a/tests/rm/interactive-always.sh +++ b/tests/rm/interactive-always.sh @@ -64,9 +64,7 @@ rm -R -f --interactive=once file4-* < in >> out 2>> err || fail=1 echo . >> err || fail=1 test -f file4-1 || fail=1 -cat <<\EOF > expout || fail=1 -EOF -sed 's/@remove_empty/rm: remove regular empty file/g' <<\EOF > experr || fail=1 +cat <<\EOF > experr.t || framework_failure_ no WHEN @remove_empty 'file1-1'? @remove_empty 'file1-2'? . WHEN=never @@ -80,8 +78,10 @@ WHEN=always --interactive overrides -f rm: remove 1 argument recursively? . EOF +sed 's/@remove_empty/rm: remove regular empty file/g' < experr.t > experr || + framework_failure_ -compare expout out || fail=1 +compare /dev/null out || fail=1 compare experr err || fail=1 Exit $fail diff --git a/tests/rm/interactive-once.sh b/tests/rm/interactive-once.sh index 5831213..5995ac0 100755 --- a/tests/rm/interactive-once.sh +++ b/tests/rm/interactive-once.sh @@ -119,9 +119,7 @@ echo . >> err || fail=1 test -d dir2-1 && fail=1 test -d dir2-2 && fail=1 -cat <<\EOF > expout || fail=1 -EOF -cat <<EOF > experr || fail=1 +cat <<EOF > experr || framework_failure_ one file, no recursion . one file, read only, answer no @@ -144,7 +142,7 @@ multiple files, recursion, answer yes rm: remove 2 arguments recursively? . EOF -compare expout out || fail=1 +compare /dev/null out || fail=1 compare experr err || fail=1 Exit $fail diff --git a/tests/rm/rm3.sh b/tests/rm/rm3.sh index 5f29e44..77490ce 100755 --- a/tests/rm/rm3.sh +++ b/tests/rm/rm3.sh @@ -31,7 +31,7 @@ chmod u-w fu du empty-u || framework_failure_ cd .. -cat <<EOF > in +cat <<EOF > in || framework_failure_ y y y @@ -52,9 +52,9 @@ rm -ir z < in > out 2>&1 || fail=1 # This avoids a bug whereby some vendor-provided (Tru64) versions of sed # would mistakenly tack a newline onto the end of the output. tr '?' '\n' < out | head --bytes=-1 | sed 's/^ //' |sort > o2 -mv o2 out +mv o2 out || framework_failure_ -sort <<EOF > exp || fail=1 +sort <<EOF > exp || framework_failure_ rm: descend into directory 'z' rm: remove regular empty file 'z/empty' rm: remove write-protected regular file 'z/fu' diff --git a/tests/rm/v-slash.sh b/tests/rm/v-slash.sh index 5312278..975f92e 100755 --- a/tests/rm/v-slash.sh +++ b/tests/rm/v-slash.sh @@ -24,7 +24,7 @@ touch a/x || framework_failure_ rm --verbose -r a/// > out || fail=1 -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ removed 'a/x' removed directory 'a/' EOF diff --git a/tests/sample-test b/tests/sample-test index 27fdc3b..8041549 100644 --- a/tests/sample-test +++ b/tests/sample-test @@ -27,7 +27,7 @@ print_ver_ FIXME # FIXME: . "$abs_srcdir/tests/other-fs-tmpdir" FIXME > out || fail=1 -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ FIXME EOF diff --git a/tests/touch/relative.sh b/tests/touch/relative.sh index a2925b2..a83300c 100755 --- a/tests/touch/relative.sh +++ b/tests/touch/relative.sh @@ -29,7 +29,7 @@ touch --ref f --date='-5 days' f || fail=1 TZ=UTC0 ls -og --time-style=+%Y-%m-%d f > out.1 || fail sed 's/ f$//;s/.* //' out.1 > out -cat <<\EOF > exp || fail=1 +cat <<\EOF > exp || framework_failure_ 2004-01-11 EOF -- 2.9.3