[Mono-bugs] [Bug 494253] New: Mono.Unix.Native.Syscall.utimes, .lutimes, .futimes use atime as mtime
bugzilla_noreply at novell.com
bugzilla_noreply at novell.com
Mon Apr 13 00:15:07 EDT 2009
http://bugzilla.novell.com/show_bug.cgi?id=494253
Summary: Mono.Unix.Native.Syscall.utimes, .lutimes, .futimes
use atime as mtime
Classification: Mono
Product: Mono: Class Libraries
Version: SVN
Platform: All
OS/Version: All
Status: NEW
Severity: Normal
Priority: P5 - None
Component: Mono.POSIX
AssignedTo: miguel at novell.com
ReportedBy: wsstefz8f9 at sxipper.net
QAContact: mono-bugs at lists.ximian.com
Found By: ---
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.8)
Gecko/2009032609 Firefox/3.0.8 (.NET CLR 3.5.30729)
In the Mono.Unix.Native.Syscall class, in at least 2.0.1 through SVN, the
functions utimes, lutimes, and futimes all have the same bug. In accordance
with the documentation for the respective system calls, they each take a
Timeval[] which is expected to have length 2, the first being the atime (last
access time) and the second being the mtime (last write time). However, they
actually set both the atime and the mtime to the time specified by the first
entry in the array.
A glance at the source code in SVN makes it pretty clear that the problem is in
support/sys-time.c in the function copy_utimes, which is used by all 3 of these
functions:
static inline struct timeval*
copy_utimes (struct timeval* to, struct Mono_Posix_Timeval *from)
{
if (from) {
to[0].tv_sec = from->tv_sec;
to[0].tv_usec = from->tv_usec;
to[1].tv_sec = from->tv_sec; //< WRONG
to[1].tv_usec = from->tv_usec; //< WRONG
return to;
}
return NULL;
}
I would change this to
static inline struct timeval*
copy_utimes (struct timeval* to, struct Mono_Posix_Timeval *from)
{
if (from) {
to[0].tv_sec = from[0].tv_sec;
to[0].tv_usec = from[0].tv_usec;
to[1].tv_sec = from[1].tv_sec; //< WRONG
to[1].tv_usec = from[1].tv_usec; //< WRONG
return to;
}
return NULL;
}
Reproducible: Always
Steps to Reproduce:
// C# code snippet
string path = "t.txt";
var times = new Mono.Unix.Native.Timeval[] {
new Mono.Unix.Native.Timeval { tv_sec = 1000 * 1000000 },
new Mono.Unix.Native.Timeval { tv_sec = 1100 * 1000000 } };
if (Mono.Unix.Native.Syscall.lutimes(path, times) != 0)
throw new IOException("Failed to set utimes for " + path + ".", new
Mono.Unix.UnixIOException());
// Then stat t.txt at the command line
Actual Results:
Access: 2001-09-09 01:46:40.000000000 +0000
Modify: 2001-09-09 01:46:40.000000000 +0000
Change: 2009-04-13 03:14:31.284572623 +0000
Expected Results:
Access: 2001-09-09 01:46:40.000000000 +0000
Modify: 2004-11-09 11:33:20.000000000 +0000
Change: 2009-04-13 03:14:31.284572623 +0000
--
Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
More information about the mono-bugs
mailing list