diff options
-rw-r--r-- | openbsd-compat/regress/utimensattest.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/openbsd-compat/regress/utimensattest.c b/openbsd-compat/regress/utimensattest.c index a7bc7634b..b29cef2f1 100644 --- a/openbsd-compat/regress/utimensattest.c +++ b/openbsd-compat/regress/utimensattest.c | |||
@@ -83,14 +83,28 @@ main(void) | |||
83 | fail("mtim.tv_nsec", 45678000, sb.st_mtim.tv_nsec); | 83 | fail("mtim.tv_nsec", 45678000, sb.st_mtim.tv_nsec); |
84 | #endif | 84 | #endif |
85 | 85 | ||
86 | /* | ||
87 | * POSIX specifies that when given a symlink, AT_SYMLINK_NOFOLLOW | ||
88 | * should update the symlink and not the destination. The compat | ||
89 | * code doesn't have a way to do this, so where possible it fails | ||
90 | * with ENOSYS instead of following a symlink when explicitly asked | ||
91 | * not to. Here we just test that it does not update the destination. | ||
92 | */ | ||
86 | if (rename(TMPFILE, TMPFILE2) == -1) | 93 | if (rename(TMPFILE, TMPFILE2) == -1) |
87 | fail("rename", 0, 0); | 94 | fail("rename", 0, 0); |
88 | if (symlink(TMPFILE2, TMPFILE) == -1) | 95 | if (symlink(TMPFILE2, TMPFILE) == -1) |
89 | fail("symlink", 0, 0); | 96 | fail("symlink", 0, 0); |
97 | ts[0].tv_sec = 11223344; | ||
98 | ts[1].tv_sec = 55667788; | ||
99 | (void)utimensat(AT_FDCWD, TMPFILE, ts, AT_SYMLINK_NOFOLLOW); | ||
100 | if (stat(TMPFILE2, &sb) == -1) | ||
101 | fail("stat", 0, 0 ); | ||
102 | if (sb.st_atime == 11223344) | ||
103 | fail("utimensat symlink st_atime", 0, 0 ); | ||
104 | if (sb.st_mtime == 55667788) | ||
105 | fail("utimensat symlink st_mtime", 0, 0 ); | ||
90 | 106 | ||
91 | if (utimensat(AT_FDCWD, TMPFILE, ts, AT_SYMLINK_NOFOLLOW) != -1) | 107 | /* Clean up */ |
92 | fail("utimensat followed symlink", 0, 0); | ||
93 | |||
94 | if (!(unlink(TMPFILE) == 0 && unlink(TMPFILE2) == 0)) | 108 | if (!(unlink(TMPFILE) == 0 && unlink(TMPFILE2) == 0)) |
95 | fail("unlink", 0, 0); | 109 | fail("unlink", 0, 0); |
96 | exit(0); | 110 | exit(0); |