diff options
Diffstat (limited to 'src/tests/evil/evil_test_unistd.c')
-rw-r--r-- | src/tests/evil/evil_test_unistd.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/tests/evil/evil_test_unistd.c b/src/tests/evil/evil_test_unistd.c index c5f56d0fc0..f96a714a06 100644 --- a/src/tests/evil/evil_test_unistd.c +++ b/src/tests/evil/evil_test_unistd.c @@ -22,6 +22,8 @@ #include <stdlib.h> #include <stdio.h> +#include <io.h> +#include <fcntl.h> # define WIN32_LEAN_AND_MEAN # include <winsock2.h> @@ -109,7 +111,38 @@ EFL_START_TEST(evil_unistd_pipe) } EFL_END_TEST +EFL_START_TEST(evil_unistd_ftruncate) +{ + FILE* f = fopen("foo.txt", "wb"); + ck_assert(f); + fseek(f, 0L, SEEK_END); + ck_assert_int_eq(ftell(f), 0); + + int fd = fileno(f); + int ret; + + ret = ftruncate(fd, 16L); + ck_assert(ret >= 0); + fseek(f, 0L, SEEK_END); + ck_assert_int_eq(ftell(f), 16); + + ret = ftruncate(fd, 8L); + ck_assert(ret >= 0); + fseek(f, 0L, SEEK_END); + ck_assert_int_eq(ftell(f), 8); + + ret = ftruncate(fd, -8L); + ck_assert(ret < 0); + ck_assert_int_eq(errno, EINVAL); + fseek(f, 0L, SEEK_END); + ck_assert_int_eq(ftell(f), 8); + + fclose(f); +} +EFL_END_TEST + void evil_test_unistd(TCase *tc) { tcase_add_test(tc, evil_unistd_pipe); + tcase_add_test(tc, evil_unistd_ftruncate); } |