This patch removes win32/time.c ChangeLog: * dlls/kernel/time.c * dlls/ntdll/Makefile.in * files/dos_fs.c * files/file.c - Reimplement time functions using ntdll functions. - Some cleanups nog.
--- ../cleanwine/dlls/kernel/time.c 2002-12-11 08:17:05.000000000 +0200 +++ dlls/kernel/time.c 2002-12-11 12:30:32.000000000 +0200 @@ -1,5 +1,5 @@ /* - * Win32 kernel functions + * Win32 kernel time functions * * Copyright 1995 Martin von Loewis and Cameron Heide * @@ -59,47 +59,17 @@ BOOL WINAPI SetLocalTime( const SYSTEMTIME *systime) /* [in] The desired local time. */ { - struct timeval tv; - struct tm t; - time_t sec; - time_t oldsec=time(NULL); - int err; - - /* get the number of seconds */ - t.tm_sec = systime->wSecond; - t.tm_min = systime->wMinute; - t.tm_hour = systime->wHour; - t.tm_mday = systime->wDay; - t.tm_mon = systime->wMonth - 1; - t.tm_year = systime->wYear - 1900; - t.tm_isdst = -1; - sec = mktime (&t); - - /* set the new time */ - tv.tv_sec = sec; - tv.tv_usec = systime->wMilliseconds * 1000; - - /* error and sanity check*/ - if( sec == (time_t)-1 || abs((int)(sec-oldsec)) > SETTIME_MAX_ADJUST ){ - err = 1; - SetLastError(ERROR_INVALID_PARAMETER); - } else { -#ifdef HAVE_SETTIMEOFDAY - err=settimeofday(&tv, NULL); /* 0 is OK, -1 is error */ - if(err == 0) - return TRUE; - SetLastError(ERROR_PRIVILEGE_NOT_HELD); -#else - err = 1; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); -#endif - } - ERR("Cannot set time to %d/%d/%d %d:%d:%d Time adjustment %ld %s\n", - systime->wYear, systime->wMonth, systime->wDay, systime->wHour, - systime->wMinute, systime->wSecond, - sec-oldsec, err == -1 ? "No Permission" : - sec==(time_t)-1 ? "" : "is too large." ); - return FALSE; + FILETIME ft; + LARGE_INTEGER st; + NTSTATUS status; + + SystemTimeToFileTime( systime, &ft ); + + RtlLocalTimeToSystemTime( (PLARGE_INTEGER)&ft, &st ); + + if ((status = NtSetSystemTime(&st, NULL))) + SetLastError( RtlNtStatusToDosError(status) ); + return !status; } @@ -142,19 +112,10 @@ BOOL WINAPI SetSystemTime( const SYSTEMTIME *systime) /* [in] The desired system time. */ { - TIME_FIELDS tf; LARGE_INTEGER t; NTSTATUS status; - tf.Second = systime->wSecond; - tf.Minute = systime->wMinute; - tf.Hour = systime->wHour; - tf.Day = systime->wDay; - tf.Month = systime->wMonth; - tf.Year = systime->wYear; - tf.Milliseconds = systime->wMilliseconds; - - RtlTimeFieldsToTime(&tf, &t); + SystemTimeToFileTime( systime, (PFILETIME)&t ); if ((status = NtSetSystemTime(&t, NULL))) SetLastError( RtlNtStatusToDosError(status) ); @@ -496,3 +457,89 @@ SetLastError( RtlNtStatusToDosError(status) ); return !status; } + +/********************************************************************* + * FileTimeToSystemTime (KERNEL32.@) + */ +BOOL WINAPI FileTimeToSystemTime( const FILETIME *ft, LPSYSTEMTIME syst ) +{ + TIME_FIELDS tf; + + RtlTimeToTimeFields((PLARGE_INTEGER)ft, &tf); + + syst->wYear = tf.Year; + syst->wMonth = tf.Month; + syst->wDay = tf.Day; + syst->wHour = tf.Hour; + syst->wMinute = tf.Minute; + syst->wSecond = tf.Second; + syst->wMilliseconds = tf.Milliseconds; + syst->wDayOfWeek = tf.Weekday; + + return TRUE; +} + +/********************************************************************* + * SystemTimeToFileTime (KERNEL32.@) + */ +BOOL WINAPI SystemTimeToFileTime( const SYSTEMTIME *syst, LPFILETIME ft ) +{ + TIME_FIELDS tf; + + tf.Year = syst->wYear; + tf.Month = syst->wMonth; + tf.Day = syst->wDay; + tf.Hour = syst->wHour; + tf.Minute = syst->wMinute; + tf.Second = syst->wSecond; + tf.Milliseconds = syst->wMilliseconds; + + RtlTimeFieldsToTime(&tf, (PLARGE_INTEGER)&ft); + + return TRUE; +} + +/********************************************************************* + * CompareFileTime (KERNEL32.@) + */ +INT WINAPI CompareFileTime( LPFILETIME x, LPFILETIME y ) +{ + if (!x || !y) return -1; + + if (x->dwHighDateTime > y->dwHighDateTime) + return 1; + if (x->dwHighDateTime < y->dwHighDateTime) + return -1; + if (x->dwLowDateTime > y->dwLowDateTime) + return 1; + if (x->dwLowDateTime < y->dwLowDateTime) + return -1; + return 0; +} + +/********************************************************************* + * GetLocalTime (KERNEL32.@) + */ +VOID WINAPI GetLocalTime(LPSYSTEMTIME systime) +{ + FILETIME lft; + LARGE_INTEGER ft; + + NtQuerySystemTime(&ft); + + RtlSystemTimeToLocalTime(&ft, (PLARGE_INTEGER)&lft); + + FileTimeToSystemTime(&ft, systime); +} + +/********************************************************************* + * GetSystemTime (KERNEL32.@) + */ +VOID WINAPI GetSystemTime(LPSYSTEMTIME systime) +{ + FILETIME ft; + + NtQuerySystemTime((PLARGE_INTEGER)&ft); + + FileTimeToSystemTime(&ft, systime); +} --- ../cleanwine/dlls/ntdll/Makefile.in 2002-11-28 19:30:35.000000000 +0200 +++ dlls/ntdll/Makefile.in 2002-12-11 12:31:48.000000000 +0200 @@ -72,7 +72,6 @@ $(TOPOBJDIR)/win32/except.c \ $(TOPOBJDIR)/win32/kernel32.c \ $(TOPOBJDIR)/win32/newfns.c \ - $(TOPOBJDIR)/win32/time.c \ cdrom.c \ critsection.c \ debugtools.c \ --- ../cleanwine/files/dos_fs.c 2002-12-11 08:17:15.000000000 +0200 +++ files/dos_fs.c 2002-12-11 11:48:12.000000000 +0200 @@ -2481,25 +2481,6 @@ return TRUE; } -/*********************************************************************** - * FileTimeToSystemTime (KERNEL32.@) - */ -BOOL WINAPI FileTimeToSystemTime( const FILETIME *ft, LPSYSTEMTIME syst ) -{ - struct tm *xtm; - DWORD remainder; - time_t xtime = DOSFS_FileTimeToUnixTime( ft, &remainder ); - xtm = gmtime(&xtime); - syst->wYear = xtm->tm_year+1900; - syst->wMonth = xtm->tm_mon + 1; - syst->wDayOfWeek = xtm->tm_wday; - syst->wDay = xtm->tm_mday; - syst->wHour = xtm->tm_hour; - syst->wMinute = xtm->tm_min; - syst->wSecond = xtm->tm_sec; - syst->wMilliseconds = remainder / 10000; - return TRUE; -} /*********************************************************************** * QueryDosDeviceA (KERNEL32.@) @@ -2562,41 +2543,6 @@ /*********************************************************************** - * SystemTimeToFileTime (KERNEL32.@) - */ -BOOL WINAPI SystemTimeToFileTime( const SYSTEMTIME *syst, LPFILETIME ft ) -{ -#ifdef HAVE_TIMEGM - struct tm xtm; - time_t utctime; -#else - struct tm xtm,*utc_tm; - time_t localtim,utctime; -#endif - - xtm.tm_year = syst->wYear-1900; - xtm.tm_mon = syst->wMonth - 1; - xtm.tm_wday = syst->wDayOfWeek; - xtm.tm_mday = syst->wDay; - xtm.tm_hour = syst->wHour; - xtm.tm_min = syst->wMinute; - xtm.tm_sec = syst->wSecond; /* this is UTC */ - xtm.tm_isdst = -1; -#ifdef HAVE_TIMEGM - utctime = timegm(&xtm); - DOSFS_UnixTimeToFileTime( utctime, ft, - syst->wMilliseconds * 10000 ); -#else - localtim = mktime(&xtm); /* now we've got local time */ - utc_tm = gmtime(&localtim); - utctime = mktime(utc_tm); - DOSFS_UnixTimeToFileTime( 2*localtim -utctime, ft, - syst->wMilliseconds * 10000 ); -#endif - return TRUE; -} - -/*********************************************************************** * DefineDosDeviceA (KERNEL32.@) */ BOOL WINAPI DefineDosDeviceA(DWORD flags,LPCSTR devname,LPCSTR targetpath) { --- ../cleanwine/files/file.c 2002-11-30 10:47:39.000000000 +0200 +++ files/file.c 2002-12-11 12:18:40.000000000 +0200 @@ -1038,24 +1038,6 @@ } /*********************************************************************** - * CompareFileTime (KERNEL32.@) - */ -INT WINAPI CompareFileTime( LPFILETIME x, LPFILETIME y ) -{ - if (!x || !y) return -1; - - if (x->dwHighDateTime > y->dwHighDateTime) - return 1; - if (x->dwHighDateTime < y->dwHighDateTime) - return -1; - if (x->dwLowDateTime > y->dwLowDateTime) - return 1; - if (x->dwLowDateTime < y->dwLowDateTime) - return -1; - return 0; -} - -/*********************************************************************** * FILE_GetTempFileName : utility for GetTempFileName */ static UINT FILE_GetTempFileName( LPCWSTR path, LPCWSTR prefix, UINT unique,