annotate tests/test-utimensat.c @ 12489:33ab12a7cea2

tests: add signature checks These tests will help catch problems similar to the one recently fixed for cygwin declaring getsubopt and symlinkat in the wrong header. * tests/signature.h (SIGNATURE_CHECK): New file. * modules/atexit-tests (Files): Use it. * modules/btowc-tests (Files): Likewise. * modules/canonicalize-lgpl-tests (Files): Likewise. * modules/ceilf-tests (Files): Likewise. * modules/ceill-tests (Files): Likewise. * modules/chown-tests (Files): Likewise. * modules/dprintf-posix-tests (Files): Likewise. * modules/dup2-tests (Files): Likewise. * modules/dup3-tests (Files): Likewise. * modules/duplocale-tests (Files): Likewise. * modules/fchdir-tests (Files): Likewise. * modules/fcntl-tests (Files): Likewise. * modules/fdopendir-tests (Files): Likewise. * modules/fflush-tests (Files): Likewise. * modules/flock-tests (Files): Likewise. * modules/floorf-tests (Files): Likewise. * modules/floorl-tests (Files): Likewise. * modules/fnmatch-tests (Files): Likewise. * modules/fopen-tests (Files): Likewise. * modules/fprintf-posix-tests (Files): Likewise. * modules/freopen-tests (Files): Likewise. * modules/frexp-nolibm-tests (Files): Likewise. * modules/frexp-tests (Files): Likewise. * modules/frexpl-nolibm-tests (Files): Likewise. * modules/frexpl-tests (Files): Likewise. * modules/fseek-tests (Files): Likewise. * modules/fseeko-tests (Files): Likewise. * modules/fsync-tests (Files): Likewise. * modules/ftell-tests (Files): Likewise. * modules/ftello-tests (Files): Likewise. * modules/futimens-tests (Files): Likewise. * modules/getaddrinfo-tests (Files): Likewise. * modules/getcwd-tests (Files): Likewise. * modules/getdelim-tests (Files): Likewise. * modules/getdtablesize-tests (Files): Likewise. * modules/getgroups-tests (Files): Likewise. * modules/gethostname-tests (Files): Likewise. * modules/getline-tests (Files): Likewise. * modules/getopt-posix-tests (Files): Likewise. * modules/gettimeofday-tests (Files): Likewise. * modules/glob-tests (Files): Likewise. * modules/iconv-tests (Files): Likewise. * modules/inet_ntop-tests (Files): Likewise. * modules/inet_pton-tests (Files): Likewise. * modules/isblank-tests (Files): Likewise. * modules/lchown-tests (Files): Likewise. * modules/ldexpl-tests (Files): Likewise. * modules/link-tests (Files): Likewise. * modules/linkat-tests (Files): Likewise. * modules/lseek-tests (Files): Likewise. * modules/lstat-tests (Files): Likewise. * modules/mbrtowc-tests (Files): Likewise. * modules/mbsinit-tests (Files): Likewise. * modules/mbsnrtowcs-tests (Files): Likewise. * modules/mbsrtowcs-tests (Files): Likewise. * modules/memchr-tests (Files): Likewise. * modules/memcmp-tests (Files): Likewise. * modules/memmem-tests (Files): Likewise. * modules/memrchr-tests (Files): Likewise. * modules/mkdir-tests (Files): Likewise. * modules/mkfifo-tests (Files): Likewise. * modules/mkfifoat-tests (Files): Likewise. * modules/mknod-tests (Files): Likewise. * modules/nanosleep-tests (Files): Likewise. * modules/nl_langinfo-tests (Files): Likewise. * modules/obstack-printf-tests (Files): Likewise. * modules/open-tests (Files): Likewise. * modules/openat-tests (Files): Likewise. * modules/perror-tests (Files): Likewise. * modules/pipe2-tests (Files): Likewise. * modules/poll-tests (Files): Likewise. * modules/popen-tests (Files): Likewise. * modules/posix_spawn-tests (Files): Likewise. * modules/posix_spawnp-tests (Files): Likewise. * modules/pread-tests (Files): Likewise. * modules/printf-posix-tests (Files): Likewise. * modules/pty-tests (Files): Likewise. * modules/random_r-tests (Files): Likewise. * modules/rawmemchr-tests (Files): Likewise. * modules/readlink-tests (Files): Likewise. * modules/remove-tests (Files): Likewise. * modules/rename-tests (Files): Likewise. * modules/renameat-tests (Files): Likewise. * modules/rmdir-tests (Files): Likewise. * modules/round-tests (Files): Likewise. * modules/roundf-tests (Files): Likewise. * modules/roundl-tests (Files): Likewise. * modules/select-tests (Files): Likewise. * modules/setenv-tests (Files): Likewise. * modules/sigaction-tests (Files): Likewise. * modules/sleep-tests (Files): Likewise. * modules/snprintf-posix-tests (Files): Likewise. * modules/snprintf-tests (Files): Likewise. * modules/sprintf-posix-tests (Files): Likewise. * modules/stat-tests (Files): Likewise. * modules/strcasestr-tests (Files): Likewise. * modules/strchrnul-tests (Files): Likewise. * modules/strerror-tests (Files): Likewise. * modules/strsignal-tests (Files): Likewise. * modules/strstr-tests (Files): Likewise. * modules/strtod-tests (Files): Likewise. * modules/strverscmp-tests (Files): Likewise. * modules/symlink-tests (Files): Likewise. * modules/symlinkat-tests (Files): Likewise. * modules/times-tests (Files): Likewise. * modules/trunc-tests (Files): Likewise. * modules/truncf-tests (Files): Likewise. * modules/truncl-tests (Files): Likewise. * modules/tsearch-tests (Files): Likewise. * modules/uname-tests (Files): Likewise. * modules/unlink-tests (Files): Likewise. * modules/unsetenv-tests (Files): Likewise. * modules/usleep-tests (Files): Likewise. * modules/utimensat-tests (Files): Likewise. * modules/vasprintf-tests (Files): Likewise. * modules/vdprintf-posix-tests (Files): Likewise. * modules/vfprintf-posix-tests (Files): Likewise. * modules/vprintf-posix-tests (Files): Likewise. * modules/vsnprintf-posix-tests (Files): Likewise. * modules/vsnprintf-tests (Files): Likewise. * modules/vsprintf-posix-tests (Files): Likewise. * modules/wcrtomb-tests (Files): Likewise. * modules/wcsnrtombs-tests (Files): Likewise. * modules/wcsrtombs-tests (Files): Likewise. * modules/wcwidth-tests (Files): Likewise. * tests/test-isfinite.c (isfinite): Ensure macro declaration. * tests/test-isinf.c (isinf): Likewise. * tests/test-isnan.c (isnan): Likewise. * tests/test-signbit.c (signbit): Likewise. * tests/test-select.c (FD_CLR, FD_ISSET, FD_SET, FD_ZERO): Ensure declaration, either as macro or with correct signature. (select): Ensure function under test is declared with correct signature in correct header. * tests/test-atexit.c (atexit): Likewise. * tests/test-btowc.c (btowc): Likewise. * tests/test-canonicalize-lgpl.c (realpath) (canonicalize_file_name): Likewise. * tests/test-ceilf1.c (ceilf): Likewise. * tests/test-ceill.c (ceill): Likewise. * tests/test-chown.c (chown): Likewise. * tests/test-dprintf-posix.c (dprintf): Likewise. * tests/test-dup2.c (dup2): Likewise. * tests/test-dup3.c (dup3): Likewise. * tests/test-duplocale.c (duplocale): Likewise. * tests/test-fchdir.c (fchdir): Likewise. * tests/test-fchownat.c (fchownat): Likewise. * tests/test-fcntl.c (fcntl): Likewise. * tests/test-fdopendir.c (fdopendir): Likewise. * tests/test-fflush.c (fflush): Likewise. * tests/test-flock.c (flock): Likewise. * tests/test-floorf1.c (floorf): Likewise. * tests/test-floorl.c (floorl): Likewise. * tests/test-fnmatch.c (fnmatch): Likewise. * tests/test-fopen.c (fopen): Likewise. * tests/test-fprintf-posix.c (fprintf): Likewise. * tests/test-freopen.c (freopen): Likewise. * tests/test-frexp.c (frexp): Likewise. * tests/test-frexpl.c (frexpl): Likewise. * tests/test-fseek.c (fseek): Likewise. * tests/test-fseeko.c (fseeko): Likewise. * tests/test-fstatat.c (fstatat): Likewise. * tests/test-fsync.c (fsync): Likewise. * tests/test-ftell.c (ftell): Likewise. * tests/test-ftello.c (ftello): Likewise. * tests/test-futimens.c (futimens): Likewise. * tests/test-getaddrinfo.c (getaddrinfo, freeaddrinfo) (gai_strerror): Likewise. * tests/test-getcwd.c (getcwd): Likewise. * tests/test-getdelim.c (getdelim): Likewise. * tests/test-getdtablesize.c (getdtablesize): Likewise. * tests/test-getgroups.c (getgroups): Likewise. * tests/test-gethostname.c (gethostname): Likewise. * tests/test-getline.c (getline): Likewise. * tests/test-getopt.c (getopt, getopt_long, getopt_long_only): Likewise. * tests/test-gettimeofday.c (gettimeofday): Likewise. * tests/test-glob.c (glob, globfree): Likewise. * tests/test-iconv.c (iconv, iconv_open, iconv_close): Likewise. * tests/test-inet_ntop.c (inet_ntop): Likewise. * tests/test-inet_pton.c (inet_pton): Likewise. * tests/test-isblank.c (isblank): Likewise. * tests/test-lchown.c (lchown): Likewise. * tests/test-ldexpl.c (ldexpl): Likewise. * tests/test-link.c (link): Likewise. * tests/test-linkat.c (linkat): Likewise. * tests/test-lseek.c (lseek): Likewise. * tests/test-lstat.c (lstat): Likewise. * tests/test-mbrtowc.c (mbrtowc): Likewise. * tests/test-mbsinit.c (mbsinit): Likewise. * tests/test-mbsnrtowcs.c (mbsnrtowcs): Likewise. * tests/test-mbsrtowcs.c (mbsrtowcs): Likewise. * tests/test-memchr.c (memchr): Likewise. * tests/test-memcmp.c (memcmp): Likewise. * tests/test-memmem.c (memmem): Likewise. * tests/test-memrchr.c (memrchr): Likewise. * tests/test-mkdir.c (mkdir): Likewise. * tests/test-mkdirat.c (mkdirat): Likewise. * tests/test-mkfifo.c (mkfifo): Likewise. * tests/test-mkfifoat.c (mkfifoat, mknodat): Likewise. * tests/test-mknod.c (mknod): Likewise. * tests/test-nanosleep.c (nanosleep): Likewise. * tests/test-nl_langinfo.c (nl_langinfo): Likewise. * tests/test-obstack-printf.c (obstack_printf, obstack_vprintf): Likewise. * tests/test-open.c (open): Likewise. * tests/test-openat.c (openat): Likewise. * tests/test-perror.c (perror): Likewise. * tests/test-pipe2.c (pipe2): Likewise. * tests/test-poll.c (poll): Likewise. * tests/test-popen.c (popen, pclose): Likewise. * tests/test-posix_spawn1.c (posix_spawnp, posix_spawnattr_init) (posix_spawnattr_destroy, posix_spawnattr_setsigmask) (posix_spawnattr_setflags, posix_spawn_file_actions_init) (posix_spawn_file_actions_destroy) (posix_spawn_file_actions_addclose) (posix_spawn_file_actions_addopen) (posix_spawn_file_actions_adddup2): Likewise. * tests/test-posix_spawn3.c (posix_spawn): Likewise. * tests/test-pread.c (pread): Likewise. * tests/test-printf-posix.c (printf): Likewise. * tests/test-pty.c (openpty, forkpty): Likewise. * tests/test-random_r.c (srandom_r, initstate_r, setstate_r) (random_r): Likewise. * tests/test-rawmemchr.c (rawmemchr): Likewise. * tests/test-readlink.c (readlink): Likewise. * tests/test-remove.c (remove): Likewise. * tests/test-rename.c (rename): Likewise. * tests/test-renameat.c (renameat): Likewise. * tests/test-rmdir.c (rmdir): Likewise. * tests/test-round1.c (round): Likewise. * tests/test-roundf1.c (roundf): Likewise. * tests/test-roundl.c (roundl): Likewise. * tests/test-setenv.c (setenv): Likewise. * tests/test-sigaction.c (sigaction): Likewise. * tests/test-sleep.c (sleep): Likewise. * tests/test-snprintf.c (snprintf): Likewise. * tests/test-sprintf-posix.c (sprintf): Likewise. * tests/test-stat.c (stat): Likewise. * tests/test-stpncpy.c (stpncpy): Likewise. * tests/test-strcasestr.c (strcasestr): Likewise. * tests/test-strchrnul.c (strchrnul): Likewise. * tests/test-strerror.c (strerror): Likewise. * tests/test-strsignal.c (strsignal): Likewise. * tests/test-strstr.c (strstr): Likewise. * tests/test-strtod.c (strtod): Likewise. * tests/test-strverscmp.c (strverscmp): Likewise. * tests/test-symlink.c (symlink): Likewise. * tests/test-symlinkat.c (symlinkat, readlinkat): Likewise. * tests/test-times.c (times): Likewise. * tests/test-trunc1.c (trunc): Likewise. * tests/test-truncf1.c (truncf): Likewise. * tests/test-truncl.c (truncl): Likewise. * tests/test-tsearch.c (tdelete, tfind, tsearch, twalk): Likewise. * tests/test-uname.c (uname): Likewise. * tests/test-unlink.c (unlink): Likewise. * tests/test-unlinkat.c (unlinkat): Likewise. * tests/test-unsetenv.c (unsetenv): Likewise. * tests/test-usleep.c (usleep): Likewise. * tests/test-utimensat.c (utimensat): Likewise. * tests/test-vasprintf.c (asprintf, vasprintf): Likewise. * tests/test-vdprintf-posix.c (vdprintf): Likewise. * tests/test-vfprintf-posix.c (vfprintf): Likewise. * tests/test-vprintf-posix.c (vprintf): Likewise. * tests/test-vsnprintf.c (vsnprintf): Likewise. * tests/test-vsprintf-posix.c (vsprintf): Likewise. * tests/test-wcrtomb.c (wcrtomb): Likewise. * tests/test-wcsnrtombs.c (wcsnrtombs): Likewise. * tests/test-wcsrtombs.c (wcsrtombs): Likewise. * tests/test-wcwidth.c (wcwidth): Likewise. Signed-off-by: Eric Blake <ebb9@byu.net>
author Eric Blake <ebb9@byu.net>
date Tue, 22 Dec 2009 10:57:14 -0700
parents e45d9bb2233e
children a48d3d749ca5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12174
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
1 /* Tests of utimensat.
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
2 Copyright (C) 2009 Free Software Foundation, Inc.
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
3
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
4 This program is free software: you can redistribute it and/or modify
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
6 the Free Software Foundation; either version 3 of the License, or
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
7 (at your option) any later version.
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
8
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
12 GNU General Public License for more details.
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
13
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
16
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
17 /* Written by Eric Blake <ebb9@byu.net>, 2009. */
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
18
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
19 #include <config.h>
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
20
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
21 #include <sys/stat.h>
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
22
12489
33ab12a7cea2 tests: add signature checks
Eric Blake <ebb9@byu.net>
parents: 12197
diff changeset
23 #include "signature.h"
33ab12a7cea2 tests: add signature checks
Eric Blake <ebb9@byu.net>
parents: 12197
diff changeset
24 SIGNATURE_CHECK (utimensat, int, (int, char const *, struct timespec const[2],
33ab12a7cea2 tests: add signature checks
Eric Blake <ebb9@byu.net>
parents: 12197
diff changeset
25 int));
33ab12a7cea2 tests: add signature checks
Eric Blake <ebb9@byu.net>
parents: 12197
diff changeset
26
12174
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
27 #include <fcntl.h>
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
28 #include <errno.h>
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
29 #include <stdbool.h>
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
30 #include <stdio.h>
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
31 #include <stdlib.h>
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
32 #include <string.h>
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
33 #include <unistd.h>
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
34
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
35 #include "stat-time.h"
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
36 #include "timespec.h"
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
37 #include "utimecmp.h"
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
38
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
39 #define ASSERT(expr) \
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
40 do \
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
41 { \
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
42 if (!(expr)) \
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
43 { \
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
44 fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
45 fflush (stderr); \
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
46 abort (); \
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
47 } \
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
48 } \
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
49 while (0)
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
50
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
51 #define BASE "test-utimensat.t"
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
52
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
53 #include "test-lutimens.h"
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
54 #include "test-utimens.h"
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
55
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
56 static int dfd = AT_FDCWD;
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
57
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
58 /* Wrap utimensat to behave like utimens. */
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
59 static int
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
60 do_utimensat (char const *name, struct timespec const times[2])
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
61 {
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
62 return utimensat (dfd, name, times, 0);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
63 }
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
64
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
65 /* Wrap utimensat to behave like lutimens. */
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
66 static int
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
67 do_lutimensat (char const *name, struct timespec const times[2])
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
68 {
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
69 return utimensat (dfd, name, times, AT_SYMLINK_NOFOLLOW);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
70 }
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
71
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
72 int
12197
e45d9bb2233e tests: avoid several compiler warnings
Eric Blake <ebb9@byu.net>
parents: 12174
diff changeset
73 main (void)
12174
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
74 {
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
75 int result1; /* Skip because of no symlink support. */
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
76 int result2; /* Skip because of no lutimens support. */
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
77 int fd;
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
78
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
79 /* Clean up any trash from prior testsuite runs. */
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
80 ASSERT (system ("rm -rf " BASE "*") == 0);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
81
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
82 /* Basic tests. */
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
83 result1 = test_utimens (do_utimensat, true);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
84 result2 = test_lutimens (do_lutimensat, result1 == 0);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
85 dfd = open (".", O_RDONLY);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
86 ASSERT (0 <= dfd);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
87 ASSERT (test_utimens (do_utimensat, false) == result1);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
88 ASSERT (test_lutimens (do_lutimensat, false) == result2);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
89 /* We expect 0/0, 0/77, or 77/77, but not 77/0. */
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
90 ASSERT (result1 <= result2);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
91
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
92 /* Directory-relative tests. */
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
93 ASSERT (mkdir (BASE "dir", 0700) == 0);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
94 ASSERT (chdir (BASE "dir") == 0);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
95 fd = creat ("file", 0600);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
96 ASSERT (0 <= fd);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
97 errno = 0;
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
98 ASSERT (utimensat (fd, ".", NULL, 0) == -1);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
99 ASSERT (errno == ENOTDIR);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
100 {
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
101 struct timespec ts[2] = { { Y2K, 0 }, { Y2K, 0 } };
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
102 struct stat st;
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
103 ASSERT (utimensat (dfd, BASE "dir/file", ts, AT_SYMLINK_NOFOLLOW) == 0);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
104 ASSERT (stat ("file", &st) == 0);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
105 ASSERT (st.st_atime == Y2K);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
106 ASSERT (get_stat_atime_ns (&st) == 0);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
107 ASSERT (st.st_mtime == Y2K);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
108 ASSERT (get_stat_mtime_ns (&st) == 0);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
109 }
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
110 ASSERT (close (fd) == 0);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
111 ASSERT (close (dfd) == 0);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
112 errno = 0;
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
113 ASSERT (utimensat (dfd, ".", NULL, 0) == -1);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
114 ASSERT (errno == EBADF);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
115
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
116 /* Cleanup. */
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
117 ASSERT (chdir ("..") == 0);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
118 ASSERT (unlink (BASE "dir/file") == 0);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
119 ASSERT (rmdir (BASE "dir") == 0);
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
120 return result1 | result2;
73f2681e0524 utimensat: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
121 }