1219439Spjd#!/bin/sh
2219439Spjd# $FreeBSD: releng/10.2/tools/regression/pjdfstest/tests/ftruncate/00.t 219439 2011-03-09 23:11:30Z pjd $
3219439Spjd
4219439Spjddesc="ftruncate descrease/increase file size"
5219439Spjd
6219439Spjddir=`dirname $0`
7219439Spjd. ${dir}/../misc.sh
8219439Spjd
9219439Spjdecho "1..21"
10219439Spjd
11219439Spjdn0=`namegen`
12219439Spjdn1=`namegen`
13219439Spjd
14219439Spjdexpect 0 mkdir ${n1} 0755
15219439Spjdcdir=`pwd`
16219439Spjdcd ${n1}
17219439Spjd
18219439Spjdexpect 0 create ${n0} 0644
19219439Spjdexpect 0 open ${n0} O_RDWR : ftruncate 0 1234567
20219439Spjdexpect 1234567 lstat ${n0} size
21219439Spjdexpect 0 open ${n0} O_WRONLY : ftruncate 0 567
22219439Spjdexpect 567 lstat ${n0} size
23219439Spjdexpect 0 unlink ${n0}
24219439Spjd
25219439Spjddd if=/dev/random of=${n0} bs=12345 count=1 >/dev/null 2>&1
26219439Spjdexpect 0 open ${n0} O_RDWR : ftruncate 0 23456
27219439Spjdexpect 23456 lstat ${n0} size
28219439Spjdexpect 0 open ${n0} O_WRONLY : ftruncate 0 1
29219439Spjdexpect 1 lstat ${n0} size
30219439Spjdexpect 0 unlink ${n0}
31219439Spjd
32219439Spjd# successful ftruncate(2) updates ctime.
33219439Spjdexpect 0 create ${n0} 0644
34219439Spjdctime1=`${fstest} stat ${n0} ctime`
35219439Spjdsleep 1
36219439Spjdexpect 0 open ${n0} O_RDWR : ftruncate 0 123
37219439Spjdctime2=`${fstest} stat ${n0} ctime`
38219439Spjdtest_check $ctime1 -lt $ctime2
39219439Spjdexpect 0 unlink ${n0}
40219439Spjd
41219439Spjd# unsuccessful ftruncate(2) does not update ctime.
42219439Spjdexpect 0 create ${n0} 0644
43219439Spjdctime1=`${fstest} stat ${n0} ctime`
44219439Spjdsleep 1
45219439Spjdexpect EINVAL -u 65534 open ${n0} O_RDONLY : ftruncate 0 123
46219439Spjdctime2=`${fstest} stat ${n0} ctime`
47219439Spjdtest_check $ctime1 -eq $ctime2
48219439Spjdexpect 0 unlink ${n0}
49219439Spjd
50219439Spjd# third argument should not affect permission.
51219439Spjdexpect 0 open ${n0} O_CREAT,O_RDWR 0 : ftruncate 0 0
52219439Spjdexpect 0 unlink ${n0}
53219439Spjdexpect 0 chmod . 0777
54219439Spjdexpect 0 -u 65534 open ${n0} O_CREAT,O_RDWR 0 : ftruncate 0 0
55219439Spjdexpect 0 unlink ${n0}
56219439Spjd
57219439Spjdcd ${cdir}
58219439Spjdexpect 0 rmdir ${n1}
59