Instead of hardcoding {NAME_MAX} as 255 and {PATH_MAX} as 1024 obtain those from

pathconf(2) and properly generate too long file names.
This should fix ENAMETOOLONG checks on Linux.
This commit is contained in:
Pawel Jakub Dawidek 2010-08-11 16:29:12 +00:00
parent 807ef45666
commit 1d6b6a46d7

View File

@ -2,13 +2,6 @@
ntest=1
name253="_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_12"
name255="${name253}34"
name256="${name255}5"
path1021="${name255}/${name255}/${name255}/${name253}"
path1023="${path1021}/x"
path1024="${path1023}x"
case "${dir}" in
/*)
maindir="${dir}/../.."
@ -99,6 +92,52 @@ namegen()
echo "fstest_`dd if=/dev/urandom bs=1k count=1 2>/dev/null | openssl md5`"
}
namegen_len()
{
len="${1}"
name=""
while :; do
namepart="`dd if=/dev/urandom bs=64 count=1 2>/dev/null | openssl md5`"
name="${name}${namepart}"
curlen=`printf "%s" "${name}" | wc -c`
[ ${curlen} -lt ${len} ] || break
done
name=`echo "${name}" | cut -b -${len}`
printf "%s" "${name}"
}
# POSIX:
# {NAME_MAX}
# Maximum number of bytes in a filename (not including terminating null).
namegen_max()
{
name_max=`${fstest} pathconf . _PC_NAME_MAX`
namegen_len ${name_max}
}
# POSIX:
# {PATH_MAX}
# Maximum number of bytes in a pathname, including the terminating null character.
dirgen_max()
{
name_max=`${fstest} pathconf . _PC_NAME_MAX`
complen=$((name_max/2))
path_max=`${fstest} pathconf . _PC_PATH_MAX`
# "...including the terminating null character."
path_max=$((path_max-1))
name=""
while :; do
name="${name}`namegen_len ${complen}`/"
curlen=`printf "%s" "${name}" | wc -c`
[ ${curlen} -lt ${path_max} ] || break
done
name=`echo "${name}" | cut -b -${path_max}`
name=`echo "${name}" | sed -E 's@/$@x@'`
printf "%s" "${name}"
}
quick_exit()
{
echo "1..1"