Skip to content
Snippets Groups Projects
Commit 14609b0b authored by Simon McVittie's avatar Simon McVittie
Browse files

g_file_info_get_modification_date_time: Calculate in integer domain

g_date_time_add_seconds() and g_date_time_add_full() use floating-point
seconds, which can result in the value varying slightly from what's
actually on disk. This causes intermittent test failures in
gio/tests/g-file-info.c on Debian i386, where we set a file's mtime
to be 50µs later, then read it back and sometimes find that it is only
49µs later than the previous value.

I've only seen this happen on i386, which means it might be to do with
different floating-point rounding when a value is stored in the 80-bit
legacy floating point registers rather than in double precision.

g_date_time_add() takes a GTimeSpan, which is in microseconds;
conveniently, that's exactly what we get from the GFileInfo.

Bug-Debian: https://bugs.debian.org/941547


Signed-off-by: default avatarSimon McVittie <smcv@collabora.com>
parent 90bdc2ff
No related branches found
No related tags found
No related merge requests found
......@@ -1822,7 +1822,7 @@ g_file_info_get_modification_date_time (GFileInfo *info)
if (value_usec == NULL)
return g_steal_pointer (&dt);
dt2 = g_date_time_add_seconds (dt, _g_file_attribute_value_get_uint32 (value_usec) / (gdouble) G_USEC_PER_SEC);
dt2 = g_date_time_add (dt, _g_file_attribute_value_get_uint32 (value_usec));
g_date_time_unref (dt);
return g_steal_pointer (&dt2);
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment