blob: 9172d818125abc11d5e3f1462cf3716d002d3cb7 [file] [log] [blame]
# SPDX-License-Identifier: GPL-2.0+
# Copyright (c) 2019 Collabora, Ltd. All Rights Reserved.
#
# Common functions for testing filename casefold feature
_has_casefold_kernel_support()
{
case $FSTYP in
ext4)
test -f '/sys/fs/ext4/features/casefold'
;;
f2fs)
test -f '/sys/fs/f2fs/features/casefold'
;;
*)
# defaults to unsupported
false
;;
esac
}
_require_scratch_casefold()
{
if ! _has_casefold_kernel_support ; then
_notrun "$FSTYP does not support casefold feature"
fi
if ! _scratch_mkfs_casefold &>>seqres.full; then
_notrun "$FSTYP userspace tools do not support casefold"
fi
# Make sure the kernel can mount a filesystem with the encoding
# defined by the userspace tools. This will fail if
# the userspace tool used a more recent encoding than the one
# supported in kernel space.
if ! _try_scratch_mount &>>seqres.full; then
_notrun "kernel can't mount filesystem with the encoding set by userspace"
fi
_scratch_unmount
# utilities used by casefold
_require_command "$CHATTR_PROG" chattr
_require_command "$LSATTR_PROG" lsattr
}
_scratch_mkfs_casefold()
{
case $FSTYP in
ext4)
_scratch_mkfs -O casefold $*
;;
f2fs)
_scratch_mkfs -C utf8 $*
;;
*)
_notrun "Don't know how to mkfs with casefold support on $FSTYP"
;;
esac
}
_scratch_mkfs_casefold_strict()
{
case $FSTYP in
ext4)
_scratch_mkfs -O casefold -E encoding_flags=strict
;;
f2fs)
_scratch_mkfs -C utf8:strict
;;
*)
_notrun "Don't know how to mkfs with casefold-strict support on $FSTYP"
;;
esac
}
# To get the exact disk name, we need some method that does a
# getdents() on the parent directory, such that we don't get
# normalized/casefolded results. 'Find' works ok.
_casefold_check_exact_name()
{
local basedir=$1
local exact_name=$2
find ${basedir} | grep -q ${exact_name}
}
_casefold_set_attr()
{
$CHATTR_PROG +F "${1}"
}
_casefold_unset_attr()
{
$CHATTR_PROG -F "${1}"
}
_casefold_lsattr_dir()
{
if $LSATTR_PROG -ld "${1}" | grep -q Casefold ; then
echo "${1} Casefold"
else
echo "${1}"
fi
}