140a8ac8fSEnji Cooper#!/bin/sh 240a8ac8fSEnji Cooper# vim: filetype=sh noexpandtab ts=8 sw=8 340a8ac8fSEnji Cooper# $FreeBSD: head/tools/regression/pjdfstest/tests/ftruncate/00.t 219439 2011-03-09 23:11:30Z pjd $ 440a8ac8fSEnji Cooper 540a8ac8fSEnji Cooperdesc="ftruncate descrease/increase file size" 640a8ac8fSEnji Cooper 740a8ac8fSEnji Cooperdir=`dirname $0` 840a8ac8fSEnji Cooper. ${dir}/../misc.sh 9e9925bdbSEnji Cooper 1040a8ac8fSEnji Cooperecho "1..26" 1140a8ac8fSEnji Cooper 1240a8ac8fSEnji Coopern0=`namegen` 1340a8ac8fSEnji Coopern1=`namegen` 1440a8ac8fSEnji Cooper 1540a8ac8fSEnji Cooperexpect 0 mkdir ${n1} 0755 1640a8ac8fSEnji Coopercdir=`pwd` 1740a8ac8fSEnji Coopercd ${n1} 1840a8ac8fSEnji Cooper 1940a8ac8fSEnji Cooperexpect 0 create ${n0} 0644 2040a8ac8fSEnji Cooperexpect 0 open ${n0} O_RDWR : ftruncate 0 1234567 2140a8ac8fSEnji Cooperexpect 1234567 lstat ${n0} size 2240a8ac8fSEnji Cooperexpect 0 open ${n0} O_WRONLY : ftruncate 0 567 2340a8ac8fSEnji Cooperexpect 567 lstat ${n0} size 2440a8ac8fSEnji Cooperexpect 0 unlink ${n0} 2540a8ac8fSEnji Cooper 2640a8ac8fSEnji Cooperdd if=/dev/random of=${n0} bs=12345 count=1 >/dev/null 2>&1 2740a8ac8fSEnji Cooperexpect 0 open ${n0} O_RDWR : ftruncate 0 23456 2840a8ac8fSEnji Cooperexpect 23456 lstat ${n0} size 2940a8ac8fSEnji Cooperexpect 0 open ${n0} O_WRONLY : ftruncate 0 1 3040a8ac8fSEnji Cooperexpect 1 lstat ${n0} size 3140a8ac8fSEnji Cooperexpect 0 unlink ${n0} 3240a8ac8fSEnji Cooper 3340a8ac8fSEnji Cooper# successful ftruncate(2) updates ctime. 3440a8ac8fSEnji Cooperexpect 0 create ${n0} 0644 3540a8ac8fSEnji Cooperctime1=`${fstest} stat ${n0} ctime` 3640a8ac8fSEnji Coopersleep 1 3740a8ac8fSEnji Cooperexpect 0 open ${n0} O_RDWR : ftruncate 0 123 3840a8ac8fSEnji Cooperctime2=`${fstest} stat ${n0} ctime` 3940a8ac8fSEnji Coopertest_check $ctime1 -lt $ctime2 4040a8ac8fSEnji Cooperexpect 0 unlink ${n0} 4140a8ac8fSEnji Cooper 4240a8ac8fSEnji Cooper# unsuccessful ftruncate(2) does not update ctime. 4340a8ac8fSEnji Cooperexpect 0 create ${n0} 0644 4440a8ac8fSEnji Cooperctime1=`${fstest} stat ${n0} ctime` 4540a8ac8fSEnji Coopersleep 1 4640a8ac8fSEnji Cooperexpect EINVAL -u 65534 open ${n0} O_RDONLY : ftruncate 0 123 4740a8ac8fSEnji Cooperctime2=`${fstest} stat ${n0} ctime` 4840a8ac8fSEnji Coopertest_check $ctime1 -eq $ctime2 4940a8ac8fSEnji Cooperexpect 0 unlink ${n0} 5040a8ac8fSEnji Cooper 5140a8ac8fSEnji Cooper# third argument should not affect permission. 5240a8ac8fSEnji Cooperexpect 0 open ${n0} O_CREAT,O_RDWR 0 : ftruncate 0 0 5340a8ac8fSEnji Cooperexpect 0 unlink ${n0} 5440a8ac8fSEnji Cooperexpect 0 chmod . 0777 5540a8ac8fSEnji Cooperexpect 0 -u 65534 open ${n0} O_CREAT,O_RDWR 0 : ftruncate 0 0 5640a8ac8fSEnji Cooperexpect 0 unlink ${n0} 5740a8ac8fSEnji Cooper 5840a8ac8fSEnji Coopercd ${cdir} 59expect 0 rmdir ${n1} 60