Files
apfstests/common/renameat2
T
Dave Chinner 98a3b42b42 common: convert to SPDX license tags
These have been scripted conversions then cleaned up by hand as
there was no consistency to the formatting of the license headers in
the common/ directory. Author information was also removed (it's in
the git history) and so now the header format is consistently:

##/bin/bash
# SPDX-License-Identifier: GPL-2.0(+)
# Copyright (c) <date> <owner>. All Rights Reserved.
#
# <file description>

Signed-off-by: Dave Chinner <dchinner@redhat.com>
2018-06-09 11:34:49 +10:00

113 lines
1.9 KiB
Plaintext

##/bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2014 Miklos Szeredi. All Rights Reserved.
#
# renameat2 helpers
# Setup source or dest
#
_setup_one()
{
local path=$1
local type=$2
case $type in
none) ;;
regu) echo foo > $path;;
symb) ln -s foo $path;;
dire) mkdir $path;;
tree) mkdir $path; echo foo > $path/bar;;
esac
}
#
# Cleanup source or dest
#
_cleanup_one()
{
local path=$1
if test -d $path; then
rm -f $path/bar
rmdir $path
else
rm -f $path
fi
}
#
# Check type of source or destination
#
_showtype_one()
{
local path=$1
if test -e $path -o -h $path; then
if test -d $path -a -e $path/bar; then
echo -n "tree"
else
echo -n `stat -c %F $path | cut -b-4`
fi
else
echo -n "none"
fi
}
#
# This runs renameat2 on all combinations of source and dest
#
_rename_tests_source_dest()
{
local source=$1
local dest=$2
local options=$3
for stype in none regu symb dire tree; do
for dtype in none regu symb dire tree; do
echo -n "$options $stype/$dtype -> "
_setup_one $source $stype
_setup_one $dest $dtype
src/renameat2 $source $dest $flags
if test $? == 0; then
_showtype_one $source
echo -n "/"
_showtype_one $dest
echo "."
fi
_cleanup_one $source
_cleanup_one $dest
done
done
}
#
# This runs _rename_tests_source_dest() for both same-directory and
# cross-directory renames
#
_rename_tests()
{
local testdir=$1
local flags=$2
#same directory renames
_rename_tests_source_dest $testdir/src $testdir/dst "samedir "
#cross directory renames
mkdir $testdir/x $testdir/y
_rename_tests_source_dest $testdir/x/src $testdir/y/dst "crossdir"
rmdir $testdir/x $testdir/y
}
#
# This checks whether the renameat2 syscall is supported
#
_requires_renameat2()
{
if test ! -x src/renameat2; then
_notrun "renameat2 binary not found"
fi
if ! src/renameat2 -t; then
_notrun "kernel doesn't support renameat2 syscall"
fi
}