public inbox for glibc-cvs@sourceware.org help / color / mirror / Atom feed
From: Adhemerval Zanella <azanella@sourceware.org> To: glibc-cvs@sourceware.org Subject: [glibc/azanella/y2038] io: Add basic tests for utimensat Date: Tue, 2 Mar 2021 12:32:46 +0000 (GMT) [thread overview] Message-ID: <20210302123246.B5385394EC10@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=31cbdf158312b6aee60ced0c2a7f426b9cde0b68 commit 31cbdf158312b6aee60ced0c2a7f426b9cde0b68 Author: Adhemerval Zanella <adhemerval.zanella@linaro.org> Date: Mon Mar 1 13:53:11 2021 -0300 io: Add basic tests for utimensat Checked on x86_64-linux-gnu and i686-linux-gnu Diff: --- io/Makefile | 2 +- io/tst-utimensat.c | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+), 1 deletion(-) diff --git a/io/Makefile b/io/Makefile index b7bebe923f..59d36e8782 100644 --- a/io/Makefile +++ b/io/Makefile @@ -68,7 +68,7 @@ tests := test-utime test-stat test-stat2 test-lfs tst-getcwd \ tst-fts tst-fts-lfs tst-open-tmpfile \ tst-copy_file_range tst-getcwd-abspath tst-lockf \ tst-ftw-lnk tst-file_change_detection tst-lchmod \ - tst-ftw-bz26353 + tst-ftw-bz26353 tst-utimensat # Likewise for statx, but we do not need static linking here. tests-internal += tst-statx diff --git a/io/tst-utimensat.c b/io/tst-utimensat.c new file mode 100644 index 0000000000..b62e409e07 --- /dev/null +++ b/io/tst-utimensat.c @@ -0,0 +1,115 @@ +/* utimensat basic tests. + Copyright (C) 2021 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <time.h> +#include <fcntl.h> +#include <sys/stat.h> +#include <sys/time.h> +#include <support/check.h> +#include <support/support.h> +#include <support/temp_file.h> +#include <support/xunistd.h> + +#ifndef struct_stat +# define struct_stat struct stat64 +#endif + +static int temp_fd = -1; +static char *testfile; +static char *testlink; + +/* struct timeval array with Y2038 threshold minus 2 and 1 seconds. */ +const static struct timespec t1[2] = { { 0x7FFFFFFE, 0 }, + { 0x7FFFFFFF, 0 } }; + +/* struct timeval array with Y2038 threshold plus 1 and 2 seconds. */ +const static struct timespec t2[2] = { { 0x80000001ULL, 0 }, + { 0x80000002ULL, 0 } }; + +/* struct timeval array around Y2038 threshold. */ +const static struct timespec t3[2] = { { 0x7FFFFFFE, 0 }, + { 0x80000002ULL, 0 } }; + +static void +do_prepare (int argc, char *argv[]) +{ + temp_fd = create_temp_file ("tst-utimensat", &testfile); + TEST_VERIFY_EXIT (temp_fd > 0); + + testlink = xasprintf ("%s-symlink", testfile); + xsymlink (testfile, testlink); + add_temp_file (testlink); +} +#define PREPARE do_prepare + +static void +test_utimensat_helper (const struct timespec ts[2]) +{ + /* Check if we run on port with 32 bit time_t size */ + { + time_t t; + if (__builtin_add_overflow (ts->tv_sec, 0, &t)) + return; + } + + { + TEST_VERIFY_EXIT (utimensat (temp_fd, testfile, ts, 0) == 0); + + struct_stat st; + xfstat (temp_fd, &st); + + /* Check if seconds for atime match */ + TEST_COMPARE (st.st_atime, ts[0].tv_sec); + + /* Check if seconds for mtime match */ + TEST_COMPARE (st.st_mtime, ts[1].tv_sec); + } + + { + struct_stat stfile_orig; + xlstat (testfile, &stfile_orig); + + TEST_VERIFY_EXIT (utimensat (0 /* ignored */, testlink, ts, + AT_SYMLINK_NOFOLLOW) + == 0); + struct_stat stlink; + xlstat (testlink, &stlink); + + TEST_COMPARE (stlink.st_atime, ts[0].tv_sec); + TEST_COMPARE (stlink.st_mtime, ts[1].tv_sec); + + /* Check if the timestamp from original file is not changed. */ + struct_stat stfile; + xlstat (testfile, &stfile); + + TEST_COMPARE (stfile_orig.st_atime, stfile.st_atime); + TEST_COMPARE (stfile_orig.st_mtime, stfile.st_mtime); + } +} + +static int +do_test (void) +{ + test_utimensat_helper (t1); + test_utimensat_helper (t2); + test_utimensat_helper (t3); + + return 0; +} + +#include <support/test-driver.c>
next reply other threads:[~2021-03-02 12:32 UTC|newest] Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-03-02 12:32 Adhemerval Zanella [this message] -- strict thread matches above, loose matches on Subject: below -- 2021-03-05 19:18 Adhemerval Zanella 2021-03-04 17:38 Adhemerval Zanella 2021-03-04 11:30 Adhemerval Zanella 2021-03-01 17:37 Adhemerval Zanella
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210302123246.B5385394EC10@sourceware.org \ --to=azanella@sourceware.org \ --cc=glibc-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).