Re: [PATCH] stdio-common: Avoid spurious mtime/ctime-related failure in tst-fseek

Florian Weimer <[email protected]>
Newsgroups gmane.comp.lib.glibc.alpha
Message-ID <[email protected]>
* Andreas Schwab:

> On Sep 02 2026, Florian Weimer wrote:
>
>> diff --git a/stdio-common/tst-fseek.c b/stdio-common/tst-fseek.c
>> index 086ede5967..64f1e0a057 100644
>> --- a/stdio-common/tst-fseek.c
>> +++ b/stdio-common/tst-fseek.c
>> @@ -345,12 +345,14 @@ do_test (void)
>>  	      printf ("%d: st_mtime not updated\n", __LINE__);
>>  	      result = 1;
>>  	    }
>> -	  if (st1.st_ctime >= st2.st_ctime)
>> +	  if (st1.st_ctime >= st2.st_ctime
>> +	      && st1.st_ctim.tv_nsec == st2.st_ctim.tv_nsec)
>>  	    {
>>  	      printf ("%d: st_ctime not changed\n", __LINE__);
>>  	      result = 1;
>>  	    }
>> -	  if (st1.st_mtime >= st2.st_mtime)
>> +	  if (st1.st_mtime >= st2.st_mtime
>> +	      && st1.st_mtim.tv_nsec == st2.st_mtim.tv_nsec)
>>  	    {
>>  	      printf ("%d: st_mtime not changed\n", __LINE__);
>>  	      result = 1;
>
> What about the other two conditions before those?  It's also strange to
> use >= instead of ==, as if the test tries to handle time going
> backwards in some way.

We haven't seen those failing.  Should we delete them?  Then we would
end up with this?

diff --git a/stdio-common/tst-fseek.c b/stdio-common/tst-fseek.c
index 086ede5967..4fc38b09e0 100644
--- a/stdio-common/tst-fseek.c
+++ b/stdio-common/tst-fseek.c
@@ -325,32 +325,22 @@ do_test (void)
       else
        {
 
-         time_t t;
          /* Make sure the timestamp actually can be different.  */
          sleep (1);
-         t = time (NULL);
 
          if (fstat64 (fd, &st2) < 0)
            {
              printf ("%d: fstat64() after fseeko() failed\n\n", __LINE__);
              result = 1;
            }
-         if (st1.st_ctime >= t)
-           {
-             printf ("%d: st_ctime not updated\n", __LINE__);
-             result = 1;
-           }
-         if (st1.st_mtime >= t)
-           {
-             printf ("%d: st_mtime not updated\n", __LINE__);
-             result = 1;
-           }
-         if (st1.st_ctime >= st2.st_ctime)
+         if (st1.st_ctime == st2.st_ctime
+             && st1.st_ctim.tv_nsec == st2.st_ctim.tv_nsec)
            {
              printf ("%d: st_ctime not changed\n", __LINE__);
              result = 1;
            }
-         if (st1.st_mtime >= st2.st_mtime)
+         if (st1.st_mtime == st2.st_mtime
+             && st1.st_mtim.tv_nsec == st2.st_mtim.tv_nsec)
            {
              printf ("%d: st_mtime not changed\n", __LINE__);
              result = 1;

Thanks,
Florian
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.