diff options
author | jmbills <jason.m.bills@intel.com> | 2021-08-31 21:23:16 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-31 21:23:16 +0300 |
commit | 04cd92067d2481643df5010cb39b2134b648cf4d (patch) | |
tree | d98626c9763ad9048ac9bfd8269e12eced18d496 /poky/meta/recipes-core/util-linux | |
parent | 10ad77d5bc86709d8ff7f95e7040e39f1c153903 (diff) | |
parent | 6f106a0a4ce15fe0678d4ffefd572e6978c72597 (diff) | |
download | openbmc-04cd92067d2481643df5010cb39b2134b648cf4d.tar.xz |
Update
Diffstat (limited to 'poky/meta/recipes-core/util-linux')
9 files changed, 335 insertions, 45 deletions
diff --git a/poky/meta/recipes-core/util-linux/util-linux.inc b/poky/meta/recipes-core/util-linux/util-linux.inc index 9d7d8a23a..0648366ba 100644 --- a/poky/meta/recipes-core/util-linux/util-linux.inc +++ b/poky/meta/recipes-core/util-linux/util-linux.inc @@ -36,5 +36,12 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/utils/util-linux/v${MAJOR_VERSION}/util-lin file://display_testname_for_subtest.patch \ file://avoid_parallel_tests.patch \ file://8a3a74160b96498d672e3652827aa7e6d7f3a120.patch \ + file://tests-kill.patch \ + file://tests-blkdiscard.patch \ + file://tests-ul.patch \ + file://tests-eject.patch \ + file://tests-lscpu.patch \ + file://0001-login-fix-close_range-use.patch \ " + SRC_URI[sha256sum] = "bd07b7e98839e0359842110525a3032fdb8eaf3a90bedde3dd1652d32d15cce5" diff --git a/poky/meta/recipes-core/util-linux/util-linux/0001-login-fix-close_range-use.patch b/poky/meta/recipes-core/util-linux/util-linux/0001-login-fix-close_range-use.patch new file mode 100644 index 000000000..7a47597bd --- /dev/null +++ b/poky/meta/recipes-core/util-linux/util-linux/0001-login-fix-close_range-use.patch @@ -0,0 +1,62 @@ +From 76ae0badd3fd7c8653fa4d3c78d2dcfcec51d23d Mon Sep 17 00:00:00 2001 +From: Karel Zak <kzak@redhat.com> +Date: Wed, 14 Jul 2021 17:25:57 +0200 +Subject: [PATCH] login: fix close_range() use + +This new syscall comes with three arguments (see kernel commit +278a5fbaed89dacd04e9d052f4594ffd0e0585de). Not sure why util-linux +assume only two. + +Upstream-Status: Backport [https://github.com/karelzak/util-linux/commit/b8d99a618baffb4fc03cda4c40e29778b6d77ad4] +Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1981729 +Signed-off-by: Karel Zak <kzak@redhat.com> +--- + include/fileutils.h | 4 ++-- + lib/fileutils.c | 2 +- + login-utils/login.c | 2 +- + 3 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/include/fileutils.h b/include/fileutils.h +index ad54b95..f86426b 100644 +--- a/include/fileutils.h ++++ b/include/fileutils.h +@@ -82,9 +82,9 @@ static inline struct dirent *xreaddir(DIR *dp) + # if defined(SYS_close_range) + # include <sys/types.h> + # ifndef HAVE_CLOSE_RANGE +-static inline int close_range(unsigned int first, unsigned int last) ++static inline int close_range(unsigned int first, unsigned int last, int flags) + { +- return syscall(SYS_close_range, first, last); ++ return syscall(SYS_close_range, first, last, flags); + } + # endif + # define HAVE_CLOSE_RANGE 1 +diff --git a/lib/fileutils.c b/lib/fileutils.c +index 846b718..a979b03 100644 +--- a/lib/fileutils.c ++++ b/lib/fileutils.c +@@ -189,7 +189,7 @@ int main(int argc, char *argv[]) + ignore_result( dup(STDIN_FILENO) ); + + # ifdef HAVE_CLOSE_RANGE +- close_range(STDERR_FILENO + 1, ~0U); ++ close_range(STDERR_FILENO + 1, ~0U, 0); + # else + ul_close_all_fds(STDERR_FILENO + 1, ~0U); + # endif +diff --git a/login-utils/login.c b/login-utils/login.c +index 7fefd05..94a042d 100644 +--- a/login-utils/login.c ++++ b/login-utils/login.c +@@ -1358,7 +1358,7 @@ static void initialize(int argc, char **argv, struct login_context *cxt) + #endif + } + #ifdef HAVE_CLOSE_RANGE +- close_range(STDERR_FILENO + 1, ~0U); ++ close_range(STDERR_FILENO + 1, ~0U, 0); + #else + ul_close_all_fds(STDERR_FILENO + 1, ~0U); + #endif +-- +2.32.0 diff --git a/poky/meta/recipes-core/util-linux/util-linux/run-ptest b/poky/meta/recipes-core/util-linux/util-linux/run-ptest index e135ee583..3a910be12 100644 --- a/poky/meta/recipes-core/util-linux/util-linux/run-ptest +++ b/poky/meta/recipes-core/util-linux/util-linux/run-ptest @@ -13,31 +13,12 @@ current_path=$(readlink -f $0) export bindir=$(dirname $current_path) export PATH=$bindir/bin:$PATH -cd tests || exit 1 - -comps=$(find ts/ -type f -perm -111 -regex ".*/[^\.~]*" | sort) - - -echo -echo "-------------------- util-linux regression tests --------------------" -echo -echo " For development purpose only. " -echo " Don't execute on production system! " -echo - -res=0 -count=0 -for ts in $comps; -do - $ts | sed -u '{ +./tests/run.sh --use-system-commands --parsable --show-diff | sed -u '{ s/^\(.*\):\(.*\) \.\.\. OK$/PASS: \1:\2/ s/^\(.*\):\(.*\) \.\.\. FAILED \(.*\)$/FAIL: \1:\2 \3/ s/^\(.*\):\(.*\) \.\.\. SKIPPED \(.*\)$/SKIP: \1:\2 \3/ - }' -done - + }' if [ "x$UDEV_PID" != "x" ]; then /etc/init.d/udev start fi - diff --git a/poky/meta/recipes-core/util-linux/util-linux/tests-blkdiscard.patch b/poky/meta/recipes-core/util-linux/util-linux/tests-blkdiscard.patch new file mode 100644 index 000000000..34b07a4b2 --- /dev/null +++ b/poky/meta/recipes-core/util-linux/util-linux/tests-blkdiscard.patch @@ -0,0 +1,31 @@ +Upstream-Status: Backport +Signed-off-by: Ross Burton <ross.burton@arm.com> + +From 45fe65d934df2c938701f1c3cd3e0a6f3bdf25e6 Mon Sep 17 00:00:00 2001 +From: Ross Burton <ross.burton@arm.com> +Date: Tue, 29 Jun 2021 18:10:40 +0100 +Subject: [PATCH] tests/blkdiscard: check correct log file for errors + +When checking if the discard ioctl is supported, look in stderr not stdout. + +Signed-off-by: Ross Burton <ross.burton@arm.com> +--- + tests/ts/blkdiscard/offsets | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/ts/blkdiscard/offsets b/tests/ts/blkdiscard/offsets +index 9dddc35e2..5e724d51b 100755 +--- a/tests/ts/blkdiscard/offsets ++++ b/tests/ts/blkdiscard/offsets +@@ -48,7 +48,7 @@ ts_log "testing offsets with full block size" + run_tscmd $TS_CMD_BLKDISCARD -v $DEVICE + if [ "$?" != "0" ]; then + # Skip the rest? For example loop backing files on NFS seem unsupported. +- grep -q "BLKDISCARD ioctl failed: Operation not supported" "$TS_OUTPUT" \ ++ grep -q "BLKDISCARD ioctl failed: Operation not supported" "$TS_ERRLOG" \ + && ts_skip "BLKDISCARD not supported" + fi + run_tscmd $TS_CMD_BLKDISCARD -v -o 1 $DEVICE +-- +2.25.1 + diff --git a/poky/meta/recipes-core/util-linux/util-linux/tests-eject.patch b/poky/meta/recipes-core/util-linux/util-linux/tests-eject.patch new file mode 100644 index 000000000..51e914d56 --- /dev/null +++ b/poky/meta/recipes-core/util-linux/util-linux/tests-eject.patch @@ -0,0 +1,56 @@ +Upstream-Status: Submitted [https://github.com/karelzak/util-linux/pull/1375] +Signed-off-by: Ross Burton <ross.burton@arm.com> + +From dd956268ba89fc1caf83c45c3c495f34d261e0e2 Mon Sep 17 00:00:00 2001 +From: Ross Burton <ross.burton@arm.com> +Date: Thu, 1 Jul 2021 20:44:31 +0100 +Subject: [PATCH] test/eject: guard asan LD_PRELOAD with use-system-commands + check + +This test tries to add asan to LD_PRELOAD because the just-built eject +will call the host /bin/umount, and apparently asan doesn't like this. + +However, if ldd isn't present, this fails as the path to asan is the +error message saying that ldd isn't present. + +As the asan workaround is only needed when executing the binaries that +have just been built and not the system binaries, only use it if the +test is on the built binaries. + +Closes #1373. + +Signed-off-by: Ross Burton <ross.burton@arm.com> +--- + tests/ts/eject/umount | 16 +++++++++------- + 1 file changed, 9 insertions(+), 7 deletions(-) + +diff --git a/tests/ts/eject/umount b/tests/ts/eject/umount +index a829d46c0..2be281ee3 100755 +--- a/tests/ts/eject/umount ++++ b/tests/ts/eject/umount +@@ -60,13 +60,15 @@ function deinit_device { + ts_scsi_debug_rmmod + } + +-# As the eject binary execl()s an uninstrumented /bin/umount binary, we need +-# to explicitly $LD_PRELOAD the ASan's runtime DSO, otherwise ASan will complain. +-# Since all three utilities used by this test (eject, fdisk, mount) are just +-# libtool wrappers, let's check the kill binary instead, which should have +-# the needed DSO information. +-ASAN_RT_PATH="$(ts_get_asan_rt_path "$TS_CMD_KILL")" +-[ -n "$ASAN_RT_PATH" ] && export LD_PRELOAD="$ASAN_RT_PATH:$LD_PRELOAD" ++if [ "$TS_USE_SYSTEM_COMMANDS" != "yes" ]; then ++ # As the eject binary execl()s an uninstrumented /bin/umount binary, we need ++ # to explicitly $LD_PRELOAD the ASan's runtime DSO, otherwise ASan will complain. ++ # Since all three utilities used by this test (eject, fdisk, mount) are just ++ # libtool wrappers, let's check the kill binary instead, which should have ++ # the needed DSO information. ++ ASAN_RT_PATH="$(ts_get_asan_rt_path "$TS_CMD_KILL")" ++ [ -n "$ASAN_RT_PATH" ] && export LD_PRELOAD="$ASAN_RT_PATH:$LD_PRELOAD" ++fi + + ts_init_subtest "by-disk" + init_device +-- +2.25.1 + diff --git a/poky/meta/recipes-core/util-linux/util-linux/tests-kill.patch b/poky/meta/recipes-core/util-linux/util-linux/tests-kill.patch new file mode 100644 index 000000000..fa49fd414 --- /dev/null +++ b/poky/meta/recipes-core/util-linux/util-linux/tests-kill.patch @@ -0,0 +1,88 @@ +Don't hardcode the use of /bin/kill, as this could be kill.procps. Instead ask +the shell what kill binary to use, which will be the symlink in +/usr/lib/util-linux/ptest/bin/. + +Upstream-Status: Backport [https://github.com/karelzak/util-linux/pull/1367] +Signed-off-by: Ross Burton <ross.burton@arm.com> + +From e3f8a88cf688dffacb5f6033a8d24e2db40f75f6 Mon Sep 17 00:00:00 2001 +From: Ross Burton <ross.burton@arm.com> +Date: Tue, 29 Jun 2021 16:34:20 +0100 +Subject: [PATCH] Don't hardcode /bin + +--- + tests/ts/kill/all_processes | 2 +- + tests/ts/kill/name_to_number | 2 +- + tests/ts/kill/options | 2 +- + tests/ts/kill/print_pid | 2 +- + tests/ts/kill/queue | 2 +- + 5 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/tests/ts/kill/all_processes b/tests/ts/kill/all_processes +index 0b137574d..b2280777f 100755 +--- a/tests/ts/kill/all_processes ++++ b/tests/ts/kill/all_processes +@@ -22,7 +22,7 @@ ts_skip_nonroot + + # make sure we do not use shell built-in command + if [ "$TS_USE_SYSTEM_COMMANDS" == "yes" ]; then +- TS_CMD_KILL="/bin/kill" ++ TS_CMD_KILL="$(which kill)" + fi + + ts_check_test_command "$TS_CMD_KILL" +diff --git a/tests/ts/kill/name_to_number b/tests/ts/kill/name_to_number +index 9f4881cb7..8a7f4bef0 100755 +--- a/tests/ts/kill/name_to_number ++++ b/tests/ts/kill/name_to_number +@@ -20,7 +20,7 @@ ts_init "$*" + + # make sure we do not use shell built-in command + if [ "$TS_USE_SYSTEM_COMMANDS" == "yes" ]; then +- TS_CMD_KILL="/bin/kill" ++ TS_CMD_KILL="$(which kill)" + fi + + ts_check_test_command "$TS_CMD_KILL" +diff --git a/tests/ts/kill/options b/tests/ts/kill/options +index 2788c70a2..10653a543 100755 +--- a/tests/ts/kill/options ++++ b/tests/ts/kill/options +@@ -20,7 +20,7 @@ ts_init "$*" + + # make sure we do not use shell built-in command + if [ "$TS_USE_SYSTEM_COMMANDS" == "yes" ]; then +- TS_CMD_KILL="/bin/kill" ++ TS_CMD_KILL="$(which kill)" + fi + + ts_check_test_command "$TS_CMD_KILL" +diff --git a/tests/ts/kill/print_pid b/tests/ts/kill/print_pid +index 6926a3714..6e2db3711 100755 +--- a/tests/ts/kill/print_pid ++++ b/tests/ts/kill/print_pid +@@ -20,7 +20,7 @@ ts_init "$*" + + # make sure we do not use shell built-in command + if [ "$TS_USE_SYSTEM_COMMANDS" == "yes" ]; then +- TS_CMD_KILL="/bin/kill" ++ TS_CMD_KILL="$(which kill)" + fi + + ts_check_test_command "$TS_CMD_KILL" +diff --git a/tests/ts/kill/queue b/tests/ts/kill/queue +index 18f10e8c2..6c9e9efc9 100755 +--- a/tests/ts/kill/queue ++++ b/tests/ts/kill/queue +@@ -20,7 +20,7 @@ ts_init "$*" + + # make sure we do not use shell built-in command + if [ "$TS_USE_SYSTEM_COMMANDS" == "yes" ]; then +- TS_CMD_KILL="/bin/kill" ++ TS_CMD_KILL="$(which kill)" + fi + + ts_check_test_command "$TS_CMD_KILL" +-- +2.25.1 + diff --git a/poky/meta/recipes-core/util-linux/util-linux/tests-lscpu.patch b/poky/meta/recipes-core/util-linux/util-linux/tests-lscpu.patch new file mode 100644 index 000000000..36a19bd5a --- /dev/null +++ b/poky/meta/recipes-core/util-linux/util-linux/tests-lscpu.patch @@ -0,0 +1,42 @@ +Upstream-Status: Backport +Signed-off-by: Ross Burton <ross.burton@arm.com> + +From c2ca2837a27a3f1344904037ea691bfdbb288f02 Mon Sep 17 00:00:00 2001 +From: Karel Zak <kzak@redhat.com> +Date: Fri, 2 Jul 2021 13:12:13 +0200 +Subject: [PATCH] lscpu: don't use DMI if executed with --sysroot + +Signed-off-by: Karel Zak <kzak@redhat.com> +--- + sys-utils/lscpu-arm.c | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/sys-utils/lscpu-arm.c b/sys-utils/lscpu-arm.c +index d52765f9d..c7128094c 100644 +--- a/sys-utils/lscpu-arm.c ++++ b/sys-utils/lscpu-arm.c +@@ -322,7 +322,8 @@ static void arm_decode(struct lscpu_cxt *cxt, struct lscpu_cputype *ct) + + arm_ids_decode(ct); + arm_rXpY_decode(ct); +- if (cxt->is_cluster) ++ ++ if (!cxt->noalive && cxt->is_cluster) + ct->nr_socket_on_cluster = get_number_of_physical_sockets_from_dmi(); + } + +@@ -330,8 +331,9 @@ static int is_cluster_arm(struct lscpu_cxt *cxt) + { + struct stat st; + +- if (!(strcmp(cxt->arch->name, "aarch64")) && +- (stat(_PATH_ACPI_PPTT, &st) < 0) && (cxt->ncputypes == 1)) ++ if (!cxt->noalive ++ && strcmp(cxt->arch->name, "aarch64") == 0 ++ && stat(_PATH_ACPI_PPTT, &st) < 0 && cxt->ncputypes == 1) + return 1; + else + return 0; +-- +2.25.1 + diff --git a/poky/meta/recipes-core/util-linux/util-linux/tests-ul.patch b/poky/meta/recipes-core/util-linux/util-linux/tests-ul.patch new file mode 100644 index 000000000..689639310 --- /dev/null +++ b/poky/meta/recipes-core/util-linux/util-linux/tests-ul.patch @@ -0,0 +1,35 @@ +Upstream-Status: Backport +Signed-off-by: Ross Burton <ross.burton@arm.com> + +From b1c71f19ea404e74d36ca5b8fbb0484043cdaef3 Mon Sep 17 00:00:00 2001 +From: Ross Burton <ross.burton@arm.com> +Date: Wed, 30 Jun 2021 11:25:01 +0100 +Subject: [PATCH] tests: mark ul/ul as a known failure + +As with ul/basic, this test produces different output when ran under +different terminals, which isn't very useful. + +Set TS_KNOWN_FAIL so that these problems don't cause the test to fail. + +Signed-off-by: Ross Burton <ross.burton@arm.com> +--- + tests/ts/ul/ul | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/tests/ts/ul/ul b/tests/ts/ul/ul +index b856e33db..c707658ac 100755 +--- a/tests/ts/ul/ul ++++ b/tests/ts/ul/ul +@@ -20,6 +20,9 @@ ts_init "$*" + + ts_check_test_command "$TS_CMD_UL" + ++# This test provides different result on some terminals and virtual machines ++TS_KNOWN_FAIL="yes" ++ + printf "a\x08ab\x5F\x08c\\n\\ttab\\f\\b\\r" | + $TS_CMD_UL -t xterm >> $TS_OUTPUT 2>> $TS_ERRLOG + +-- +2.25.1 + diff --git a/poky/meta/recipes-core/util-linux/util-linux_2.37.bb b/poky/meta/recipes-core/util-linux/util-linux_2.37.bb index 9a50c75e7..2548b7210 100644 --- a/poky/meta/recipes-core/util-linux/util-linux_2.37.bb +++ b/poky/meta/recipes-core/util-linux/util-linux_2.37.bb @@ -71,7 +71,7 @@ EXTRA_OECONF = "\ --enable-mount --enable-partx --enable-raw --enable-rfkill \ --enable-unshare --enable-write \ \ - --disable-bfs --disable-chfn-chsh --disable-login \ + --disable-bfs --disable-login \ --disable-makeinstall-chown --disable-minix --disable-newgrp \ --disable-use-tty-group --disable-vipw \ \ @@ -91,7 +91,7 @@ EXTRA_OECONF_append = " --disable-hwclock-gplv3" # build host versions during development # PACKAGECONFIG ?= "pcre2" -PACKAGECONFIG_class-target ?= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}" +PACKAGECONFIG_class-target ?= "${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'chfn-chsh pam', '', d)}" PACKAGECONFIG[pam] = "--enable-su --enable-runuser,--disable-su --disable-runuser, libpam," # Respect the systemd feature for uuidd PACKAGECONFIG[systemd] = "--with-systemd --with-systemdsystemunitdir=${systemd_system_unitdir}, --without-systemd --without-systemdsystemunitdir,systemd" @@ -102,6 +102,7 @@ PACKAGECONFIG[readline] = "--with-readline,--without-readline,readline" # PCRE support in hardlink PACKAGECONFIG[pcre2] = ",,libpcre2" PACKAGECONFIG[cryptsetup] = "--with-cryptsetup,--without-cryptsetup,cryptsetup" +PACKAGECONFIG[chfn-chsh] = "--enable-chfn-chsh,--disable-chfn-chsh," EXTRA_OEMAKE = "ARCH=${TARGET_ARCH} CPU= CPUOPT= 'OPT=${CFLAGS}'" @@ -132,8 +133,8 @@ RDEPENDS_${PN}-dev += " util-linux-libuuid-dev" RPROVIDES_${PN}-dev = "${PN}-libblkid-dev ${PN}-libmount-dev" RDEPENDS_${PN}-bash-completion += "${PN}-lsblk" -RDEPENDS_${PN}-ptest += "bash bc btrfs-tools coreutils e2fsprogs grep iproute2 kmod mdadm procps sed socat which xz" -RRECOMMENDS_${PN}-ptest += "kernel-module-scsi-debug" +RDEPENDS_${PN}-ptest += "bash bc btrfs-tools coreutils e2fsprogs findutils grep iproute2 kmod mdadm procps sed socat which xz" +RRECOMMENDS_${PN}-ptest += "kernel-module-scsi-debug kernel-module-sd-mod kernel-module-loop" RDEPENDS_${PN}-swaponoff = "${PN}-swapon ${PN}-swapoff" ALLOW_EMPTY_${PN}-swaponoff = "1" @@ -209,6 +210,8 @@ ALTERNATIVE_PRIORITY = "80" ALTERNATIVE_LINK_NAME[blkid] = "${base_sbindir}/blkid" ALTERNATIVE_LINK_NAME[blockdev] = "${base_sbindir}/blockdev" ALTERNATIVE_LINK_NAME[cal] = "${bindir}/cal" +ALTERNATIVE_LINK_NAME[chfn] = "${bindir}/chfn" +ALTERNATIVE_LINK_NAME[chsh] = "${bindir}/chsh" ALTERNATIVE_LINK_NAME[chrt] = "${bindir}/chrt" ALTERNATIVE_LINK_NAME[dmesg] = "${base_bindir}/dmesg" ALTERNATIVE_LINK_NAME[eject] = "${bindir}/eject" @@ -278,25 +281,10 @@ do_install_ptest() { cp -pR ${S}/tests/ts ${D}${PTEST_PATH}/tests/ cp ${WORKDIR}/build/config.h ${D}${PTEST_PATH} - # The original paths of executables to be tested point to a local folder containing - # the executables. We want to test the installed executables, not the local copies. - # So strip the paths, the executables will be located via "which" - sed -i \ - -e '/^TS_CMD/ s|$top_builddir/||g' \ - -e '/^TS_HELPER/ s|$top_builddir|${PTEST_PATH}|g' \ - ${D}${PTEST_PATH}/tests/commands.sh - - # Change 'if [ ! -x "$1" ]' to 'if [ ! -x "`which $1 2>/dev/null`"]' - sed -i -e \ - '/^\tif[[:space:]]\[[[:space:]]![[:space:]]-x[[:space:]]"$1"/s|$1|`which $1 2>/dev/null`|g' \ - ${D}${PTEST_PATH}/tests/functions.sh - - # Running "kill" without the the complete path would use the shell's built-in kill - sed -i -e \ - '/^TS_CMD_KILL/ s|kill|${PTEST_PATH}/bin/kill|g' \ - ${D}${PTEST_PATH}/tests/commands.sh - - - sed -i 's|@base_sbindir@|${base_sbindir}|g' ${D}${PTEST_PATH}/run-ptest + sed -i 's|@base_sbindir@|${base_sbindir}|g' ${D}${PTEST_PATH}/run-ptest + # chfn needs PAM + if ! ${@bb.utils.contains('PACKAGECONFIG', 'pam', 'true', 'false', d)}; then + rm -rf ${D}${PTEST_PATH}/tests/ts/chfn + fi } |