Note to self: read the docs thoroughly before submitting a patch.
These 2 patches replace the similarly named patches in the parent
message. There was a slight problem in the daylight saving part.
Changelog:
- Fix LocalFileTimeToFileTime (was offset if daylight was active).
- Fix FileTimeToLocalFileTime (the case when timegm is absent was
wrong, and gave different results than timegm).
Vincent
diff -urN wine-orig/files/dos_fs.c wine-pas-compilé/files/dos_fs.c
--- wine-orig/files/dos_fs.c Thu May 23 16:36:46 2002
+++ wine-pas-compilé/files/dos_fs.c Sun May 26 21:20:25 2002
@@ -2174,11 +2174,14 @@
{
struct tm *xtm;
DWORD remainder;
+ time_t utctime;
- /* convert from local to UTC. Perhaps not correct. FIXME */
- time_t unixtime = DOSFS_FileTimeToUnixTime( localft, &remainder );
- xtm = gmtime( &unixtime );
- DOSFS_UnixTimeToFileTime( mktime(xtm), utcft, remainder );
+ /* Converts from local to UTC. */
+ time_t localtime = DOSFS_FileTimeToUnixTime( localft, &remainder );
+ xtm = gmtime( &localtime );
+ utctime = mktime(xtm);
+ if(xtm->tm_isdst > 0) utctime-=3600;
+ DOSFS_UnixTimeToFileTime( utctime, utcft, remainder );
return TRUE;
}
diff -urN wine-orig/files/dos_fs.c wine-pas-compilé/files/dos_fs.c
--- wine-orig/files/dos_fs.c Thu May 23 16:36:46 2002
+++ wine-pas-compilé/files/dos_fs.c Sun May 26 21:20:25 2002
@@ -2193,7 +2193,7 @@
LPFILETIME localft )
{
DWORD remainder;
- /* convert from UTC to local. Perhaps not correct. FIXME */
+ /* Converts from UTC to local. */
time_t unixtime = DOSFS_FileTimeToUnixTime( utcft, &remainder );
#ifdef HAVE_TIMEGM
struct tm *xtm = localtime( &unixtime );
@@ -2203,14 +2203,13 @@
DOSFS_UnixTimeToFileTime( localtime, localft, remainder );
#else
- struct tm *xtm,*gtm;
- time_t time1,time2;
+ struct tm *xtm;
+ time_t time;
- xtm = localtime( &unixtime );
- gtm = gmtime( &unixtime );
- time1 = mktime(xtm);
- time2 = mktime(gtm);
- DOSFS_UnixTimeToFileTime( 2*time1-time2, localft, remainder );
+ xtm = gmtime( &unixtime );
+ time = mktime(xtm);
+ if(xtm->tm_isdst > 0) time-=3600;
+ DOSFS_UnixTimeToFileTime( 2*unixtime-time, localft, remainder );
#endif
return TRUE;
}