From: Zbigniew Jędrzejewski-Szmek Date: Wed, 4 Oct 2017 13:17:09 +0000 (+0200) Subject: test-copy: fix operation when test-copy is too small X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=4e4ce38d455ec4688ead79a7f43907df13a076b0;p=elogind.git test-copy: fix operation when test-copy is too small Fixes #6981. --- diff --git a/src/test/test-copy.c b/src/test/test-copy.c index 0b9195113..fc5a8c169 100644 --- a/src/test/test-copy.c +++ b/src/test/test-copy.c @@ -222,6 +222,14 @@ static void test_copy_bytes_regular_file(const char *src, bool try_reflink, uint else assert_se(IN_SET(r, 0, 1)); + assert_se(fstat(fd, &buf) == 0); + assert_se(fstat(fd2, &buf2) == 0); + assert_se((uint64_t) buf2.st_size == MIN((uint64_t) buf.st_size, max_bytes)); + + if (max_bytes < (uint64_t) -1) + /* Make sure the file is now higher than max_bytes */ + assert_se(ftruncate(fd2, max_bytes + 1) == 0); + assert_se(lseek(fd2, 0, SEEK_SET) == 0); r = copy_bytes(fd2, fd3, max_bytes, try_reflink ? COPY_REFLINK : 0); @@ -235,12 +243,12 @@ static void test_copy_bytes_regular_file(const char *src, bool try_reflink, uint * are copying is exactly max_bytes bytes. */ assert_se(r == 1); - assert_se(fstat(fd, &buf) == 0); - assert_se(fstat(fd2, &buf2) == 0); assert_se(fstat(fd3, &buf3) == 0); - assert_se((uint64_t) buf2.st_size == MIN((uint64_t) buf.st_size, max_bytes)); - assert_se(buf3.st_size == buf2.st_size); + if (max_bytes == (uint64_t) -1) + assert_se(buf3.st_size == buf2.st_size); + else + assert_se((uint64_t) buf3.st_size == max_bytes); unlink(fn2); unlink(fn3);