Author: pjd
Date: Wed Aug 11 16:29:12 2010
New Revision: 211177
URL: http://svn.freebsd.org/changeset/base/211177

Log:
  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.

Modified:
  head/tools/regression/fstest/tests/misc.sh

Modified: head/tools/regression/fstest/tests/misc.sh
==============================================================================
--- head/tools/regression/fstest/tests/misc.sh  Wed Aug 11 10:51:27 2010        
(r211176)
+++ head/tools/regression/fstest/tests/misc.sh  Wed Aug 11 16:29:12 2010        
(r211177)
@@ -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"
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to