sys-block/parted: fix test portability issues

Closes: https://bugs.gentoo.org/753677
Closes: https://bugs.gentoo.org/890869
Thanks-to: Kerin Millar <kfm@plushkava.net>
Signed-off-by: Sam James <sam@gentoo.org>
This commit is contained in:
Sam James
2023-06-16 03:56:01 +01:00
parent 2ef0a75304
commit 8489bdccc7
3 changed files with 150 additions and 1 deletions

View File

@@ -0,0 +1,86 @@
https://debbugs.gnu.org/61128
From c7b5c04083b8fc21c3e0d044375631d559e122e3 Mon Sep 17 00:00:00 2001
From: Kerin Millar <kfm@plushkava.net>
Date: Wed, 25 Jan 2023 15:26:46 +0000
Subject: [PATCH] Use complementation correctly in shell globs
Negation should be performed by using the <exclamation-mark> character.
Attempting to use the <circumflex> shall result in undefined behaviour.
Dash used to tolerate this violation of the spec but the following
commit put a stop to it.
https://git.kernel.org/pub/scm/utils/dash/dash.git/commit/?id=8f9cca0
Signed-off-by: Kerin Millar <kfm@plushkava.net>
Link: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_13
Bug: https://bugs.gentoo.org/890869
--- a/m4/o-direct.m4
+++ b/m4/o-direct.m4
@@ -47,14 +47,14 @@ frobnozzle
/dev/shm) ;;
/*) case $pe_dir in
# Accept $HOME or $TMP only if the value is nice and boring.
- *[^/a-zA-Z0-9_.-]*) ;;
+ *[!/a-zA-Z0-9_.-]*) ;;
*) pe_cand_dirs="$pe_cand_dirs $pe_dir";;
esac
esac
done
case $PARTED_TMPDIR in
- *[^/a-zA-Z0-9_.-]*) ;;
+ *[!/a-zA-Z0-9_.-]*) ;;
*) pe_cand_dirs="$PARTED_TMPDIR $pe_cand_dirs";;
esac
--- a/tests/t-local.sh
+++ b/tests/t-local.sh
@@ -138,7 +138,7 @@ require_512_byte_sector_size_()
peek_()
{
case $# in 2) ;; *) echo "usage: peek_ FILE 0_BASED_OFFSET" >&2; exit 1;; esac
- case $2 in *[^0-9]*) echo "peek_: invalid offset: $2" >&2; exit 1 ;; esac
+ case $2 in *[!0-9]*) echo "peek_: invalid offset: $2" >&2; exit 1 ;; esac
dd if="$1" bs=1 skip="$2" count=1
}
@@ -146,7 +146,7 @@ poke_()
{
case $# in 3) ;; *) echo "usage: poke_ FILE 0_BASED_OFFSET BYTE" >&2; exit 1;;
esac
- case $2 in *[^0-9]*) echo "poke_: invalid offset: $2" >&2; exit 1 ;; esac
+ case $2 in *[!0-9]*) echo "poke_: invalid offset: $2" >&2; exit 1 ;; esac
case $3 in ?) ;; *) echo "poke_: invalid byte: '$3'" >&2; exit 1 ;; esac
printf %s "$3" | dd of="$1" bs=1 seek="$2" count=1 conv=notrunc
}
@@ -155,7 +155,7 @@ poke_()
gpt1_pte_name_offset_()
{
local ss=$1
- case $ss in *[^0-9]*) echo "$0: invalid sector size: $ss">&2; return 1;; esac
+ case $ss in *[!0-9]*) echo "$0: invalid sector size: $ss">&2; return 1;; esac
expr $ss \* 2 + 56
return 0
}
@@ -167,7 +167,7 @@ gpt_corrupt_primary_table_()
case $# in 2) ;; *) echo "$0: expected 2 args, got $#" >&2; return 1;; esac
local dev=$1
local ss=$2
- case $ss in *[^0-9]*) echo "$0: invalid sector size: $ss">&2; return 1;; esac
+ case $ss in *[!0-9]*) echo "$0: invalid sector size: $ss">&2; return 1;; esac
# get the first byte of the name
local orig_pte_name_byte
@@ -188,7 +188,7 @@ gpt_restore_primary_table_()
case $# in 3) ;; *) echo "$0: expected 2 args, got $#" >&2; return 1;; esac
local dev=$1
local ss=$2
- case $ss in *[^0-9]*) echo "$0: invalid sector size: $ss">&2; return 1;; esac
+ case $ss in *[!0-9]*) echo "$0: invalid sector size: $ss">&2; return 1;; esac
local orig_byte=$3
poke_ $dev $(gpt1_pte_name_offset_ $ss) "$orig_byte" || return 1
}
--
2.39.1

View File

@@ -0,0 +1,59 @@
https://debbugs.gnu.org/61129
From af8ed66e00bfac4a189ea32c62199bffaa3eb836 Mon Sep 17 00:00:00 2001
From: Kerin Millar <kfm@plushkava.net>
Date: Sun, 29 Jan 2023 00:34:27 +0000
Subject: [PATCH] Use any available UTF-8 locale in t0251; skip if none found
The "t0251-gpt-unicode.sh" test presently suffers from several issues
which are addressed herewith.
Do not begin by trying to match the "en_US.utf8" locale specifically.
The only requirement for the test to be conducted correctly is that the
system character type be set to UTF-8. For this, _any_ UTF-8 supporting
locale will do. Simply select the first locale that ends with ".utf8"
or "UTF-8". After all, not everyone is American, nor do all systems
using GNU glibc yet have a C.UTF-8 locale.
Escape the dot/period in the locale-matching regular expression.
Skip the test outright if no UTF-8 supporting locale can be found,
rather than spuriously fail.
Assign the locale found to LC_CTYPE. There is no need to set any of the
other locale-related environment variables for the purpose of this
test. To guarantee that LC_CTYPE takes effect, unset LC_ALL also.
Signed-off-by: Kerin Millar <kfm@plushkava.net>
Bug: https://bugs.gentoo.org/753677
--- a/tests/t0251-gpt-unicode.sh
+++ b/tests/t0251-gpt-unicode.sh
@@ -17,16 +17,21 @@
. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+# LC_CTYPE must not be overridden
+unset LC_ALL
+
+# any UTF-8 locale will suffice for setting the character type
+LC_CTYPE=$(locale -a | awk '/\.(utf8|UTF-8)$/ { print; exit; }')
+if [ -z "$LC_CTYPE" ]; then
+ skip_ 'no UTF-8 supporting locale is available'
+fi
+export LC_CTYPE
+
dev=loop-file
# create zeroed device
truncate -s 10m $dev || fail=1
-LC_ALL=$(locale -a | grep en_US.utf8)
-if [ -z "$LC_ALL" ]; then
- LC_ALL=C.UTF-8
-fi
-export LC_ALL="$LC_ALL"
# create gpt label with named partition
part_name=$(printf 'foo\341\264\244')
parted -s $dev mklabel gpt mkpart primary ext2 1MiB 2MiB name 1 $part_name > empty 2>&1 || fail=1
--
2.39.1

View File

@@ -45,6 +45,10 @@ PATCHES=(
"${FILESDIR}"/${PN}-3.3-atari.patch
# https://lists.gnu.org/archive/html/bug-parted/2022-02/msg00000.html
"${FILESDIR}"/${PN}-3.4-posix-printf.patch
# https://debbugs.gnu.org/61129
"${FILESDIR}"/${PN}-3.6-tests-unicode.patch
# https://debbugs.gnu.org/61128
"${FILESDIR}"/${PN}-3.6-tests-non-bash.patch
)
# false positive
@@ -52,7 +56,7 @@ QA_CONFIG_IMPL_DECL_SKIP="MIN"
src_prepare() {
default
eautoconf
eautoreconf
touch doc/pt_BR/Makefile.in || die
}