(root)/
glibc-2.38/
io/
tst-posix_fallocate-common.c
       1  /* Common posix_fallocate tests definitions.
       2     Copyright (C) 2016-2023 Free Software Foundation, Inc.
       3     This file is part of the GNU C Library.
       4  
       5     The GNU C Library is free software; you can redistribute it and/or
       6     modify it under the terms of the GNU Lesser General Public
       7     License as published by the Free Software Foundation; either
       8     version 2.1 of the License, or (at your option) any later version.
       9  
      10     The GNU C Library is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      13     Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public
      16     License along with the GNU C Library; if not, see
      17     <https://www.gnu.org/licenses/>.  */
      18  
      19  #include <fcntl.h>
      20  #include <limits.h>
      21  #include <stdint.h>
      22  #include <sys/stat.h>
      23  #include <sys/types.h>
      24  #include <unistd.h>
      25  
      26  #include <support/support.h>
      27  #include <support/check.h>
      28  #include <support/temp_file.h>
      29  
      30  static char *temp_filename;
      31  static int temp_fd;
      32  
      33  static void
      34  do_prepare (int argc, char **argv)
      35  {
      36    temp_fd = create_temp_file ("tst-posix_fallocate.", &temp_filename);
      37    if (temp_fd == -1)
      38      FAIL_EXIT1 ("cannot create temporary file: %m\n");
      39  }
      40  #define PREPARE do_prepare
      41  
      42  static int
      43  do_test_with_offset (off_t offset)
      44  {
      45    struct stat st;
      46  
      47    if (posix_fallocate (temp_fd, offset, 768) != 0)
      48      FAIL_EXIT1 ("1st posix_fallocate call failed");
      49  
      50    if (fstat (temp_fd, &st) != 0)
      51      FAIL_EXIT1 ("2nd fstat failed");
      52  
      53    if (st.st_size != (offset + 768))
      54      FAIL_EXIT1 ("file size after first posix_fallocate call is %lu, "
      55  		"expected %lu",
      56  		(unsigned long int) st.st_size, 512lu + 768lu);
      57  
      58    if (posix_fallocate (temp_fd, 0, 1024) != 0)
      59      FAIL_EXIT1 ("2nd posix_fallocate call failed");
      60  
      61    if (fstat (temp_fd, &st) != 0)
      62      FAIL_EXIT1 ("3rd fstat failed");
      63  
      64    if (st.st_size != (offset) + 768)
      65      FAIL_EXIT1 ("file size changed in second posix_fallocate");
      66  
      67    offset += 2048;
      68    if (posix_fallocate (temp_fd, offset, 64) != 0)
      69      FAIL_EXIT1 ("3rd posix_fallocate call failed");
      70  
      71    if (fstat (temp_fd, &st) != 0)
      72      FAIL_EXIT1 ("4th fstat failed");
      73  
      74    if (st.st_size != (offset + 64))
      75      FAIL_EXIT1 ("file size after first posix_fallocate call is %llu, "
      76  		"expected %u",
      77  		(unsigned long long int) st.st_size, 2048u + 64u);
      78  
      79    return 0;
      80  }
      81  
      82  /* This function is defined by the individual tests.  */
      83  static int do_test (void);
      84  
      85  #include <support/test-driver.c>