diff options
| -rwxr-xr-x | contrib/maxlen.bash | 74 | ||||
| -rwxr-xr-x | tests/maxlen.bash | 18 | 
2 files changed, 74 insertions, 18 deletions
| diff --git a/contrib/maxlen.bash b/contrib/maxlen.bash new file mode 100755 index 0000000..a4aa082 --- /dev/null +++ b/contrib/maxlen.bash @@ -0,0 +1,74 @@ +#!/bin/bash +# +# Find out the maximum supported filename length and print it. +# +# Part of the gocryptfs test suite +# https://nuetzlich.net/gocryptfs/ + +set -eu +MYNAME=$(basename "$0") + +if [[ $# -ne 1 || $1 == -* ]]; then +	echo "Usage: $MYNAME DIRECTORY" +	exit 1 +fi + +cd "$1" +echo "Testing $PWD" + +echo -n "  Maximum filename length: " +# Add one character at a time until we hit an error +NAME="" +while true ; do +	NEXT="${NAME}x" +	if [[ -e $NEXT ]]; then +		echo "error: file $NEXT already exists" +		exit 1 +	fi +	touch $NEXT 2> /dev/null || break +	rm $NEXT +	NAME="$NEXT" +done +echo "${#NAME}" + +echo -n "  Maximum dirname length:  " +# Add one character at a time until we hit an error +NAME="" +while true ; do +	NEXT="${NAME}x" +	mkdir $NEXT 2> /dev/null || break +	rmdir $NEXT +	NAME="$NEXT" +done +MAX_DIRNAME=${#NAME} +echo "${#NAME}" + +for CHARS_PER_SUBDIR in 1 10 100 $MAX_DIRNAME ; do +	echo -n "  Maximum path length with $(printf %3d $CHARS_PER_SUBDIR) chars per subdir:     " +	# Trick from https://stackoverflow.com/a/5349842/1380267 +	SUBDIR=$(printf 'x%.0s' $(seq 1 $CHARS_PER_SUBDIR)) +	mkdir "$SUBDIR" +	P=$SUBDIR +	# Create a deep path, one $SUBDIR at a time, until we hit an error +	while true ; do +		NEXT="$P/$SUBDIR" +		mkdir "$NEXT" 2> /dev/null || break +		P=$NEXT +		echo -n -e "\b\b\b\b" +		printf %4d ${#P} +	done +	# Then add one character at a time until we hit an error +	NAME="" +	while true ; do +		NEXT="${NAME}x" +		touch "$P/$NEXT" 2> /dev/null || break +		NAME=$NEXT +	done +	if [[ $NAME != "" ]] ; then +		P=$P/$NAME +	fi +	echo -n -e "\b\b\b\b" +	printf %4d ${#P} +	echo +	rm -R "$SUBDIR" +done diff --git a/tests/maxlen.bash b/tests/maxlen.bash deleted file mode 100755 index fb133e0..0000000 --- a/tests/maxlen.bash +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -eu -# -# Find out the maximum supported filename length and print it. -# -# Part of the gocryptfs test suite -# https://nuetzlich.net/gocryptfs/ - -NAME="maxlen." -LEN=0 - -while [ $LEN -le 10000 ]; do -	touch $NAME 2> /dev/null || break -	rm $NAME -	LEN=${#NAME} -	NAME="${NAME}x" -done - -echo $LEN | 
