#include <fcntl.h> #include <sys/stat.h> static void do_prepare (void); #define PREPARE(argc, argv) do_prepare () static int do_test (void); #define TEST_FUNCTION do_test () #include <test-skeleton.c> static int fd; static void do_prepare (void) { fd = create_temp_file ("tst-posix_fallocate.", NULL); if (fd == -1) { printf ("cannot create temporary file: %m\n"); exit (1); } } static int do_test (void) { struct stat64 st; if (fstat64 (fd, &st) != 0) { puts ("1st fstat failed"); return 1; } if (st.st_size != 0) { puts ("file not created with size 0"); return 1; } if (posix_fallocate (fd, 512, 768) != 0) { puts ("1st posix_fallocate call failed"); return 1; } if (fstat64 (fd, &st) != 0) { puts ("2nd fstat failed"); return 1; } if (st.st_size != 512 + 768) { printf ("file size after first posix_fallocate call is %llu, expected %u\n", (unsigned long long int) st.st_size, 512u + 768u); return 1; } if (posix_fallocate (fd, 0, 1024) != 0) { puts ("2nd posix_fallocate call failed"); return 1; } if (fstat64 (fd, &st) != 0) { puts ("3rd fstat failed"); return 1; } if (st.st_size != 512 + 768) { puts ("file size changed in second posix_fallocate"); return 1; } if (posix_fallocate (fd, 2048, 64) != 0) { puts ("3rd posix_fallocate call failed"); return 1; } if (fstat64 (fd, &st) != 0) { puts ("4th fstat failed"); return 1; } if (st.st_size != 2048 + 64) { printf ("file size after first posix_fallocate call is %llu, expected %u\n", (unsigned long long int) st.st_size, 2048u + 64u); return 1; } close (fd); return 0; }