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