1#!/bin/sh 2 3# Test file operations using random file names containing non-ASCII characters 4 5MDUNIT=10 6FS=/mnt 7LOCALE=C.UTF-8 8FILES=1000 9 10export LANG=$LOCALE 11 12randomfilename () { 13 name="" 14 count=$(jot -r 1 10 3) 15 for r in $(jot -r $count 7 0); do 16 r=$(( r + 0 )) 17 c='·' 18 if [ $r -gt 0 ]; then 19 for i in $(jot $r); do 20 name="$name$i" 21 done 22 fi 23 count=$(( count - 1 )) 24 if [ "$count" -gt 0 ]; then 25 name="$name$c" 26 fi 27 done 28 echo "$name" 29} 30 31( 32 set -e 33 34 mdconfig -u $MDUNIT -t malloc -s 512m 35 newfs_msdos -c 8 -F 32 /dev/md$MDUNIT > /dev/null 2>&1 36 mkdir -p $FS 37 mount_msdosfs -L $LOCALE /dev/md$MDUNIT $FS 38 39 mkdir -p $FS/test 40 cd $FS/test 41 42 for i in $(jot $FILES); do 43 testfiles="$testfiles 44$(randomfilename)" 45 done 46 47 testfiles=$(echo "$testfiles" | grep "." | sort -R | uniq) 48 49 for f in $testfiles; do 50 echo "$f" > $f 51 done 52 for f in $(echo "$testfiles" | sort -R); do 53 cp $f $f.tmp 54 done 55 for f in $(echo "$testfiles" | sort -R); do 56 mv $f.tmp $f 57 done 58 for f in $(echo "$testfiles" | sort -R); do 59 rm $f 60 done 61) 62 63failed=$? 64 65cd 66 67[ "$failed" -ne 0 ] && ls $FS/test 68 69umount /dev/md$MDUNIT 70 71#[ "$failed" -ne 0 ] && hd /dev/md$MDUNIT > /tmp/msdos23.dump 72 73fsck_msdosfs -y /dev/md$MDUNIT 74 75mdconfig -d -u $MDUNIT 2>/dev/null 76 77exit $failed 78