S390: Don't test nanoseconds in io/tst-stat.c

Both new tests io/tst-stat and io/tst-stat-lfs (_FILE_OFFSET_BITS=64)
are comparing the nanosecond fields with the statx result.  Unfortunately
on s390(31bit) those fields are always zero if old KABI with non-LFS
support is used.  With _FILE_OFFSET_BITS=64 stat is using statx internally.

As suggested by Adhemerval this patch disables the nanosecond check for
s390(31bit).
Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
This commit is contained in:
Stefan Liebler 2021-03-17 14:03:52 +01:00
parent 0923f74ada
commit 1966f47a1e
4 changed files with 40 additions and 2 deletions

View file

@ -91,9 +91,12 @@ do_test (void)
TEST_COMPARE (stx.stx_blocks, st.st_blocks);
TEST_COMPARE (stx.stx_ctime.tv_sec, st.st_ctim.tv_sec);
TEST_COMPARE (stx.stx_ctime.tv_nsec, st.st_ctim.tv_nsec);
TEST_COMPARE (stx.stx_mtime.tv_sec, st.st_mtim.tv_sec);
TEST_COMPARE (stx.stx_mtime.tv_nsec, st.st_mtim.tv_nsec);
if (support_stat_nanoseconds ())
{
TEST_COMPARE (stx.stx_ctime.tv_nsec, st.st_ctim.tv_nsec);
TEST_COMPARE (stx.stx_mtime.tv_nsec, st.st_mtim.tv_nsec);
}
}
return 0;

View file

@ -71,6 +71,7 @@ libsupport-routines = \
support_set_small_thread_stack_size \
support_shared_allocate \
support_small_stack_thread_attribute \
support_stat_nanoseconds \
support_subprocess \
support_test_compare_blob \
support_test_compare_failure \

View file

@ -134,6 +134,9 @@ extern ssize_t support_copy_file_range (int, off64_t *, int, off64_t *,
operations (such as fstatat or utimensat). */
extern bool support_path_support_time64 (const char *path);
/* Return true if stat supports nanoseconds resolution. */
extern bool support_stat_nanoseconds (void);
__END_DECLS
#endif /* SUPPORT_H */

View file

@ -0,0 +1,31 @@
/* Check if stat supports nanosecond resolution.
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 <stdbool.h>
bool
support_stat_nanoseconds (void)
{
/* s390 stat64 compat symbol does not support nanoseconds resolution
and it used on non-LFS [f,l]stat[at] implementations. */
#if defined __linux__ && !defined __s390x__ && defined __s390__
return false;
#else
return true;
#endif
}