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] linux: Add lutimes test Date: Thu, 4 Mar 2021 17:37:49 +0000 (GMT) [thread overview] Message-ID: <20210304173749.D4B663AA903D@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=fee29255adfb3358c975b2c07fa6d45739b6027c commit fee29255adfb3358c975b2c07fa6d45739b6027c Author: Adhemerval Zanella <adhemerval.zanella@linaro.org> Date: Fri Feb 26 20:27:25 2021 -0300 linux: Add lutimes test It uses stat to compare against the values set by lutimes. Diff: --- sysdeps/unix/sysv/linux/Makefile | 2 +- sysdeps/unix/sysv/linux/tst-lutimes.c | 95 +++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 1 deletion(-) diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 5a9db8b2a9..46e3689a64 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -108,7 +108,7 @@ tests += tst-clone tst-clone2 tst-clone3 tst-fanotify tst-personality \ tst-rlimit-infinity tst-ofdlocks tst-gettid tst-gettid-kill \ tst-tgkill tst-sysvsem-linux tst-sysvmsg-linux tst-sysvshm-linux \ tst-timerfd tst-ppoll tst-futimens tst-utime tst-utimes \ - tst-clock_adjtime tst-futimes + tst-clock_adjtime tst-futimes tst-lutimes tests-internal += tst-ofdlocks-compat tst-sigcontext-get_pc diff --git a/sysdeps/unix/sysv/linux/tst-lutimes.c b/sysdeps/unix/sysv/linux/tst-lutimes.c new file mode 100644 index 0000000000..9e30691bbe --- /dev/null +++ b/sysdeps/unix/sysv/linux/tst-lutimes.c @@ -0,0 +1,95 @@ +/* Basix test for utimes. + 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 <sys/time.h> +#include <support/check.h> +#include <support/temp_file.h> +#include <support/support.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 timeval t1[2] = { { 0x7FFFFFFE, 0 }, { 0x7FFFFFFF, 0 } }; + +/* struct timeval array with Y2038 threshold plus 1 and 2 seconds. */ +const static struct timeval t2[2] = { { 0x80000001ULL, 0 }, + { 0x80000002ULL, 0 } }; + +/* struct timeval array around Y2038 threshold. */ +const static struct timeval t3[2] = { { 0x7FFFFFFE, 0 }, + { 0x80000002ULL, 0 } }; + +#define PREPARE do_prepare +static void +do_prepare (int argc, char *argv[]) +{ + temp_fd = create_temp_file ("utimes", &testfile); + TEST_VERIFY_EXIT (temp_fd > 0); + + testlink = xasprintf ("%s-symlink", testfile); + xsymlink (testfile, testlink); + add_temp_file (testlink); +} + +static int +test_utime_helper (const struct timeval *tv) +{ + /* Check if we run on port with 32 bit time_t size */ + time_t t; + if (__builtin_add_overflow (tv->tv_sec, 0, &t)) + return 0; + + struct_stat stfile_orig; + xlstat (testfile, &stfile_orig); + + TEST_VERIFY_EXIT (lutimes (testlink, tv) == 0); + + struct_stat stlink; + xlstat (testlink, &stlink); + + TEST_COMPARE (stlink.st_atime, tv[0].tv_sec); + TEST_COMPARE (stlink.st_mtime, tv[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); + + return 0; +} + +static int +do_test (void) +{ + test_utime_helper (&t1[0]); + test_utime_helper (&t2[0]); + test_utime_helper (&t3[0]); + + return 0; +} + +#include <support/test-driver.c>
next reply other threads:[~2021-03-04 17:37 UTC|newest] Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-03-04 17:37 Adhemerval Zanella [this message] -- strict thread matches above, loose matches on Subject: below -- 2021-03-05 19:18 Adhemerval Zanella 2021-03-04 11:30 Adhemerval Zanella 2021-03-02 12:32 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=20210304173749.D4B663AA903D@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).