[PATCH] io: Check at runtime if timestamp supports nanoseconds

Adhemerval Zanella adhemerval.zanella@linaro.org
Wed Mar 31 20:17:13 GMT 2021



On 31/03/2021 04:17, Stefan Liebler wrote:
> On 29/03/2021 19:43, Adhemerval Zanella wrote:
>> Now that non-LFS stat function is implemented on to on LFS, it will
>> use statx when available.  It allows to check for nanosecond timestamp
>> if the kernel supports __NR_statx.
>>
>> Checked on s390-linux-gnu with 4.12.14 kernel.
>> ---
>>  io/tst-stat.c                      |  7 ++++-
>>  support/support.h                  |  2 +-
>>  support/support_stat_nanoseconds.c | 41 +++++++++++++++++++++++++-----
>>  3 files changed, 41 insertions(+), 9 deletions(-)
>>
>> diff --git a/io/tst-stat.c b/io/tst-stat.c
>> index 397d480ecc..22b89bb3e7 100644
>> --- a/io/tst-stat.c
>> +++ b/io/tst-stat.c
>> @@ -25,6 +25,7 @@
>>  #include <support/xunistd.h>
>>  #include <sys/stat.h>
>>  #include <sys/sysmacros.h>
>> +#include <stdio.h>
>>  #include <unistd.h>
>>  
>>  static void
>> @@ -73,6 +74,10 @@ do_test (void)
>>  
>>    test_t tests[] = { stat_check, lstat_check, fstat_check, fstatat_check };
>>  
>> +  bool check_ns = support_stat_nanoseconds (path);
>> +  if (!check_ns)
>> +    printf ("warning: timestamp with nanoseconds not supportted\n");
>> +
>>    for (int i = 0; i < array_length (tests); i++)
>>      {
>>        struct stat st;
>> @@ -92,7 +97,7 @@ do_test (void)
>>  
>>        TEST_COMPARE (stx.stx_ctime.tv_sec, st.st_ctim.tv_sec);
>>        TEST_COMPARE (stx.stx_mtime.tv_sec, st.st_mtim.tv_sec);
>> -      if (support_stat_nanoseconds ())
>> +      if (check_ns)
>>  	{
>>  	  TEST_COMPARE (stx.stx_ctime.tv_nsec, st.st_ctim.tv_nsec);
>>  	  TEST_COMPARE (stx.stx_mtime.tv_nsec, st.st_mtim.tv_nsec);
> OK
> 
>> diff --git a/support/support.h b/support/support.h
>> index b0352726bf..e023d00857 100644
>> --- a/support/support.h
>> +++ b/support/support.h
>> @@ -142,7 +142,7 @@ static __inline bool support_path_support_time64 (const char *path)
>>  }
>>  
>>  /* Return true if stat supports nanoseconds resolution.  */
>> -extern bool support_stat_nanoseconds (void);
>> +extern bool support_stat_nanoseconds (const char *path);
> OK
>>  
>>  __END_DECLS
>>  
>> diff --git a/support/support_stat_nanoseconds.c b/support/support_stat_nanoseconds.c
>> index c0d5b2c3a9..94953c0868 100644
>> --- a/support/support_stat_nanoseconds.c
>> +++ b/support/support_stat_nanoseconds.c
>> @@ -16,16 +16,43 @@
>>     License along with the GNU C Library; if not, see
>>     <https://www.gnu.org/licenses/>.  */
>>  
>> +#include <errno.h>
>> +#include <fcntl.h>
>> +#include <support/check.h>
>> +#include <support/support.h>
>> +#include <support/timespec.h>
>>  #include <stdbool.h>
>> +#include <sys/stat.h>
>> +#include <sys/syscall.h>
> Do we really need syscall.h?

It does not, I will remove it.


More information about the Libc-alpha mailing list