Page MenuHomeFreeBSD

D51207.id164026.diff
No OneTemporary

D51207.id164026.diff

diff --git a/usr.bin/truncate/tests/Makefile b/usr.bin/truncate/tests/Makefile
--- a/usr.bin/truncate/tests/Makefile
+++ b/usr.bin/truncate/tests/Makefile
@@ -1,3 +1,6 @@
+
+BINDIR?= ${TESTSDIR}
+
ATF_TESTS_SH= truncate_test
.include <bsd.test.mk>
diff --git a/usr.bin/truncate/tests/truncate_test.sh b/usr.bin/truncate/tests/truncate_test.sh
--- a/usr.bin/truncate/tests/truncate_test.sh
+++ b/usr.bin/truncate/tests/truncate_test.sh
@@ -438,6 +438,48 @@
[ ${st_size} -eq 0 ] || atf_fail "new file should now be 0 bytes"
}
+atf_test_case deallocate
+deallocate_head()
+{
+ atf_set "descr" "Verifies that -d punches a hole in the file"
+ atf_set "require.user" "root"
+}
+deallocate_body()
+{
+ blocksz=$(stat -h . | cut -f1 -d' ')
+ atf_check test -n "$blocksz"
+
+ filesz=$((blocksz * 3))
+ atf_check -e not-empty dd if=/dev/random of=sparse \
+ bs=${filesz} count=1 conv=notrunc
+
+ atf_check cp sparse sparse.orig
+ atf_check cp sparse sparse.orig.orig
+
+ # Punch a hole in the middle, ensure that bit is zeroed out.
+ atf_check -e not-empty dd if=/dev/zero of=sparse.orig \
+ bs=${blocksz} oseek=1 count=1 conv=notrunc
+ atf_check truncate -d -o ${blocksz} -l ${blocksz} sparse
+ atf_check cmp -s sparse sparse.orig
+
+ # Clobber the end part of the original file and punch a hole in
+ # the same spot on the new file, ensure that it has zeroed out that
+ # portion.
+ atf_check -e not-empty dd if=/dev/zero of=sparse.orig \
+ bs=${blocksz} oseek=2 count=1 conv=notrunc
+ atf_check truncate -d -o $((blocksz * 2)) -l ${blocksz} sparse
+ atf_check cmp -s sparse sparse.orig
+
+ # Now bring the original file back and make sure that punching a hole
+ # in data at the beginning doesn't disturb the data at the end.
+ atf_check cp sparse.orig.orig sparse.orig
+ atf_check cp sparse.orig.orig sparse
+ atf_check -e not-empty dd if=/dev/zero of=sparse.orig \
+ bs=${blocksz} oseek=0 count=1 conv=notrunc
+ atf_check truncate -d -l ${blocksz} sparse
+ atf_check cmp -s sparse sparse.orig
+}
+
atf_init_test_cases()
{
atf_add_test_case illegal_option
@@ -459,4 +501,5 @@
atf_add_test_case roundup
atf_add_test_case rounddown
atf_add_test_case rounddown_zero
+ atf_add_test_case deallocate
}
diff --git a/usr.bin/truncate/truncate.c b/usr.bin/truncate/truncate.c
--- a/usr.bin/truncate/truncate.c
+++ b/usr.bin/truncate/truncate.c
@@ -62,7 +62,6 @@
int do_refer;
int got_size;
char *fname, *rname;
- struct spacectl_range sr;
fd = -1;
rsize = tsize = sz = off = 0;
@@ -198,6 +197,8 @@
tsize = 0;
if (do_dealloc == 1) {
+ struct spacectl_range sr;
+
sr.r_offset = off;
sr.r_len = len;
r = fspacectl(fd, SPACECTL_DEALLOC, &sr, 0, &sr);

File Metadata

Mime Type
text/plain
Expires
Fri, Aug 21, 10:56 AM (10 h, 10 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
37029510
Default Alt Text
D51207.id164026.diff (2 KB)

Event Timeline