root/maint/gnulib/tests/test-utimens.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. do_futimens
  2. do_fdutimens
  3. main

   1 /* Tests of utimens.
   2    Copyright (C) 2009-2021 Free Software Foundation, Inc.
   3 
   4    This program is free software: you can redistribute it and/or modify
   5    it under the terms of the GNU General Public License as published by
   6    the Free Software Foundation; either version 3 of the License, or
   7    (at your option) any later version.
   8 
   9    This program is distributed in the hope that it will be useful,
  10    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12    GNU General Public License for more details.
  13 
  14    You should have received a copy of the GNU General Public License
  15    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
  16 
  17 /* Written by Eric Blake <ebb9@byu.net>, 2009.  */
  18 
  19 #include <config.h>
  20 
  21 #include "utimens.h"
  22 
  23 #include <stdbool.h>
  24 #include <stdio.h>
  25 #include <stdlib.h>
  26 
  27 #include "ignore-value.h"
  28 #include "macros.h"
  29 
  30 #define BASE "test-utimens.t"
  31 
  32 #include "test-futimens.h"
  33 #include "test-lutimens.h"
  34 #include "test-utimens.h"
  35 
  36 /* Wrap fdutimens to behave like futimens.  */
  37 static int
  38 do_futimens (int fd, struct timespec const times[2])
     /* [previous][next][first][last][top][bottom][index][help] */
  39 {
  40   return fdutimens (fd, NULL, times);
  41 }
  42 
  43 /* Test the use of file descriptors alongside a name.  */
  44 static int
  45 do_fdutimens (char const *name, struct timespec const times[2])
     /* [previous][next][first][last][top][bottom][index][help] */
  46 {
  47   int result;
  48   int fd = open (name, O_WRONLY);
  49   if (fd < 0)
  50     fd = open (name, O_RDONLY);
  51   errno = 0;
  52   result = fdutimens (fd, name, times);
  53   if (0 <= fd)
  54     {
  55       int saved_errno = errno;
  56       close (fd);
  57       errno = saved_errno;
  58     }
  59   return result;
  60 }
  61 
  62 int
  63 main (void)
     /* [previous][next][first][last][top][bottom][index][help] */
  64 {
  65   int result1; /* Skip because of no symlink support.  */
  66   int result2; /* Skip because of no futimens support.  */
  67   int result3; /* Skip because of no lutimens support.  */
  68 
  69   /* Clean up any trash from prior testsuite runs.  */
  70   ignore_value (system ("rm -rf " BASE "*"));
  71 
  72   result1 = test_utimens (utimens, true);
  73   ASSERT (test_utimens (do_fdutimens, false) == result1);
  74   /* Print only one skip message.  */
  75   result2 = test_futimens (do_futimens, result1 == 0);
  76   result3 = test_lutimens (lutimens, (result1 + result2) == 0);
  77   /* We expect 0/0, 0/77, or 77/77, but not 77/0.  */
  78   ASSERT (result1 <= result3);
  79   return result1 | result2 | result3;
  80 }

/* [previous][next][first][last][top][bottom][index][help] */