From: Adhemerval Zanella Date: Mon, 22 Mar 2021 17:23:45 +0000 (-0300) Subject: linux: Add lutimes test X-Git-Tag: upstream/2.34~664 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=272e71dc366297781cd6ec5d8690e540d4b48398;p=platform%2Fupstream%2Fglibc.git linux: Add lutimes test It uses stat to compare against the values set by lutimes. Checked on x86_64-linux-gnu and i686-linux-gnu. Reviewed-by: Siddhesh Poyarekar --- diff --git a/io/Makefile b/io/Makefile index 0f56bd5..aecab9a 100644 --- a/io/Makefile +++ b/io/Makefile @@ -72,6 +72,7 @@ tests := test-utime test-stat test-stat2 test-lfs tst-getcwd \ tst-utime \ tst-utimes \ tst-futimes \ + tst-lutimes \ tst-futimens \ # Likewise for statx, but we do not need static linking here. diff --git a/io/tst-futimens.c b/io/tst-futimens.c index ac7a980..b3e3f31 100644 --- a/io/tst-futimens.c +++ b/io/tst-futimens.c @@ -38,7 +38,7 @@ test_futimens_helper (const char *file, int fd, const struct timespec *ts) return 0; } -#define TEST_CALL(fname, fd, v1, v2) \ +#define TEST_CALL(fname, fd, lname, v1, v2) \ test_futimens_helper (fname, fd, (struct timespec[]) { { v1, 0 }, \ { v2, 0 } }) diff --git a/io/tst-futimes.c b/io/tst-futimes.c index ea7ac7d..bdef38d 100644 --- a/io/tst-futimes.c +++ b/io/tst-futimes.c @@ -39,7 +39,7 @@ test_futimens_helper (const char *file, int fd, const struct timeval *tv) return 0; } -#define TEST_CALL(fname, fd, v1, v2) \ +#define TEST_CALL(fname, fd, lname, v1, v2) \ test_futimens_helper (fname, fd, (struct timeval[]) { { v1, 0 }, \ { v2, 0 } }) diff --git a/io/tst-lutimes.c b/io/tst-lutimes.c new file mode 100644 index 0000000..b2da3c5 --- /dev/null +++ b/io/tst-lutimes.c @@ -0,0 +1,53 @@ +/* Test for lutimes. + 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 + . */ + +#include +#include +#include +#include + +static int +test_lutimes_helper (const char *testfile, int fd, const char *testlink, + const struct timeval *tv) +{ + struct stat64 stfile_orig; + xlstat (testfile, &stfile_orig); + + TEST_VERIFY_EXIT (lutimes (testlink, tv) == 0); + + struct stat64 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 stat64 stfile; + xlstat (testfile, &stfile); + + TEST_COMPARE (stfile_orig.st_atime, stfile.st_atime); + TEST_COMPARE (stfile_orig.st_mtime, stfile.st_mtime); + + return 0; +} + +#define TEST_CALL(fname, fd, lname, v1, v2) \ + test_lutimes_helper (fname, fd, lname, (struct timeval[]) { { v1, 0 }, \ + { v2, 0 } }) + +#include "tst-utimensat-skeleton.c" diff --git a/io/tst-utime.c b/io/tst-utime.c index c1c7e75..6269ef7 100644 --- a/io/tst-utime.c +++ b/io/tst-utime.c @@ -39,7 +39,7 @@ test_utime_helper (const char *file, int fd, const struct utimbuf *ut) return 0; } -#define TEST_CALL(fname, fd, v1, v2) \ +#define TEST_CALL(fname, fd, lname, v1, v2) \ test_utime_helper (fname, fd, &(struct utimbuf) { (v1), (v2) }) #include "tst-utimensat-skeleton.c" diff --git a/io/tst-utimensat-skeleton.c b/io/tst-utimensat-skeleton.c index 3589146..ad9f676 100644 --- a/io/tst-utimensat-skeleton.c +++ b/io/tst-utimensat-skeleton.c @@ -24,6 +24,7 @@ static int temp_fd = -1; static char *testfile; +static char *testlink; const static struct { int64_t v1; @@ -49,6 +50,10 @@ do_prepare (int argc, char *argv[]) { temp_fd = create_temp_file ("utime", &testfile); TEST_VERIFY_EXIT (temp_fd > 0); + + testlink = xasprintf ("%s-symlink", testfile); + xsymlink (testfile, testlink); + add_temp_file (testlink); } static int @@ -82,7 +87,7 @@ do_test (void) continue; } - TEST_CALL (testfile, temp_fd, tests[i].v1, tests[i].v2); + TEST_CALL (testfile, temp_fd, testlink, tests[i].v1, tests[i].v2); } return 0; diff --git a/io/tst-utimes.c b/io/tst-utimes.c index ba71050..991ab0c 100644 --- a/io/tst-utimes.c +++ b/io/tst-utimes.c @@ -40,7 +40,7 @@ test_utimes_helper (const char *file, int fd, const struct timeval *tv) return 0; } -#define TEST_CALL(fname, fd, v1, v2) \ +#define TEST_CALL(fname, fd, lname, v1, v2) \ test_utimes_helper (fname, fd, (struct timeval[]) { { v1, 0 }, \ { v2, 0 } })