| #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; |
| } |