From 670527e34ea6aee96f381d0f51302320d87d00a3 Mon Sep 17 00:00:00 2001 From: Niels Weber Date: Tue, 30 Apr 2013 12:28:22 +0200 Subject: Replace the external date and time implementation. For now, replace it with a stub, the missing functionality isn't that crucial and will be reimplemented later. Change-Id: I2413069ad7837c8ccadc1c40e89eaf078674ee9e Reviewed-by: Tim Jenssen --- src/libs/7zip/unix/CPP/myWindows/myDateAndTime.cpp | 71 ++++ .../7zip/unix/CPP/myWindows/wine_date_and_time.cpp | 434 --------------------- src/libs/7zip/unix/unix.pri | 2 +- 3 files changed, 72 insertions(+), 435 deletions(-) create mode 100644 src/libs/7zip/unix/CPP/myWindows/myDateAndTime.cpp delete mode 100644 src/libs/7zip/unix/CPP/myWindows/wine_date_and_time.cpp (limited to 'src/libs/7zip/unix') diff --git a/src/libs/7zip/unix/CPP/myWindows/myDateAndTime.cpp b/src/libs/7zip/unix/CPP/myWindows/myDateAndTime.cpp new file mode 100644 index 000000000..984954979 --- /dev/null +++ b/src/libs/7zip/unix/CPP/myWindows/myDateAndTime.cpp @@ -0,0 +1,71 @@ +/************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Installer Framework. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +**************************************************************************/ + +#include +#include "windows.h" + +BOOL WINAPI FileTimeToSystemTime(CONST FILETIME *source,SYSTEMTIME *target) +{ + // TODO: Implementation! + return TRUE; +} + +BOOLEAN WINAPI RtlTimeToSecondsSince1970(const LARGE_INTEGER *Time, DWORD *Seconds) +{ + // TODO: Implementation! + return TRUE; +} + +void WINAPI RtlSecondsSince1970ToFileTime(DWORD Seconds, FILETIME *ft) +{ + // TODO: Implementation! +} + +VOID WINAPI GetSystemTime(SYSTEMTIME *st) +{ + // TODO: Implementation! +} + +BOOL WINAPI SystemTimeToFileTime(const SYSTEMTIME *source,FILETIME *target) +{ + // TODO: Implementation! + return TRUE; +} diff --git a/src/libs/7zip/unix/CPP/myWindows/wine_date_and_time.cpp b/src/libs/7zip/unix/CPP/myWindows/wine_date_and_time.cpp deleted file mode 100644 index 6d7f83a0c..000000000 --- a/src/libs/7zip/unix/CPP/myWindows/wine_date_and_time.cpp +++ /dev/null @@ -1,434 +0,0 @@ -/* - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ -#include "config.h" - -#include -#include -#include -#include -#include /* gettimeofday */ -#include -#include -#include - -#include - -// #define TRACEN(u) u; -#define TRACEN(u) /* */ - -typedef LONG NTSTATUS; -#define STATUS_SUCCESS 0x00000000 - -#define TICKSPERSEC 10000000 -#define TICKSPERMSEC 10000 -#define SECSPERDAY 86400 -#define SECSPERHOUR 3600 -#define SECSPERMIN 60 -#define MINSPERHOUR 60 -#define HOURSPERDAY 24 -#define EPOCHWEEKDAY 1 /* Jan 1, 1601 was Monday */ -#define DAYSPERWEEK 7 -#define EPOCHYEAR 1601 -#define DAYSPERNORMALYEAR 365 -#define DAYSPERLEAPYEAR 366 -#define MONSPERYEAR 12 -#define DAYSPERQUADRICENTENNIUM (365 * 400 + 97) -#define DAYSPERNORMALCENTURY (365 * 100 + 24) -#define DAYSPERNORMALQUADRENNIUM (365 * 4 + 1) - -/* 1601 to 1970 is 369 years plus 89 leap days */ -#define SECS_1601_TO_1970 ((369 * 365 + 89) * (ULONGLONG)SECSPERDAY) -#define TICKS_1601_TO_1970 (SECS_1601_TO_1970 * TICKSPERSEC) -/* 1601 to 1980 is 379 years plus 91 leap days */ -#define SECS_1601_TO_1980 ((379 * 365 + 91) * (ULONGLONG)SECSPERDAY) -#define TICKS_1601_TO_1980 (SECS_1601_TO_1980 * TICKSPERSEC) -typedef short CSHORT; - -static LONG TIME_GetBias() { - time_t utc = time(NULL); - struct tm *ptm = localtime(&utc); - int localdaylight = ptm->tm_isdst; /* daylight for local timezone */ - ptm = gmtime(&utc); - ptm->tm_isdst = localdaylight; /* use local daylight, not that of Greenwich */ - LONG bias = (int)(mktime(ptm)-utc); - TRACEN((printf("TIME_GetBias %ld\n",(long)bias))) - return bias; -} - -static inline void RtlSystemTimeToLocalTime( const LARGE_INTEGER *SystemTime, - LARGE_INTEGER *LocalTime ) { - LONG bias = TIME_GetBias(); - LocalTime->QuadPart = SystemTime->QuadPart - bias * (LONGLONG)TICKSPERSEC; -} - -void WINAPI RtlSecondsSince1970ToFileTime( DWORD Seconds, FILETIME * ft ) { - ULONGLONG secs = Seconds * (ULONGLONG)TICKSPERSEC + TICKS_1601_TO_1970; - ft->dwLowDateTime = (DWORD)secs; - ft->dwHighDateTime = (DWORD)(secs >> 32); - TRACEN((printf("RtlSecondsSince1970ToFileTime %lx => %lx %lx\n",(long)Seconds,(long)ft->dwHighDateTime,(long)ft->dwLowDateTime))) -} - -/* -void WINAPI RtlSecondsSince1970ToTime( DWORD Seconds, LARGE_INTEGER *Time ) -{ - ULONGLONG secs = Seconds * (ULONGLONG)TICKSPERSEC + TICKS_1601_TO_1970; - // Time->u.LowPart = (DWORD)secs; Time->u.HighPart = (DWORD)(secs >> 32); - Time->QuadPart = secs; -} - */ - -BOOL WINAPI DosDateTimeToFileTime( WORD fatdate, WORD fattime, FILETIME * ft) -{ - struct tm newtm; -#ifndef ENV_HAVE_TIMEGM - struct tm *gtm; - time_t time1, time2; -#endif - - TRACEN((printf("DosDateTimeToFileTime\n"))) - - newtm.tm_sec = (fattime & 0x1f) * 2; - newtm.tm_min = (fattime >> 5) & 0x3f; - newtm.tm_hour = (fattime >> 11); - newtm.tm_mday = (fatdate & 0x1f); - newtm.tm_mon = ((fatdate >> 5) & 0x0f) - 1; - newtm.tm_year = (fatdate >> 9) + 80; - newtm.tm_isdst = -1; -#ifdef ENV_HAVE_TIMEGM - RtlSecondsSince1970ToFileTime( timegm(&newtm), ft ); -#else - newtm.tm_isdst = 0; - time1 = mktime(&newtm); - gtm = gmtime(&time1); - time2 = mktime(gtm); - RtlSecondsSince1970ToFileTime( 2*time1-time2, ft ); -#endif - TRACEN((printf("DosDateTimeToFileTime(%ld,%ld) => %lx %lx\n", - (long)fatdate,(long)fattime, - (long)ft->dwHighDateTime,(long)ft->dwLowDateTime))) - - return TRUE; -} - -/* -BOOL WINAPI DosDateTimeToFileTime( WORD fatdate, WORD fattime, FILETIME * ft) { - struct tm newtm; - - TRACEN((printf("DosDateTimeToFileTime\n"))) - - memset(&newtm,0,sizeof(newtm)); - newtm.tm_sec = (fattime & 0x1f) * 2; - newtm.tm_min = (fattime >> 5) & 0x3f; - newtm.tm_hour = (fattime >> 11); - newtm.tm_mday = (fatdate & 0x1f); - newtm.tm_mon = ((fatdate >> 5) & 0x0f) - 1; - newtm.tm_year = (fatdate >> 9) + 80; - newtm.tm_isdst = -1; - - time_t time1 = mktime(&newtm); - LONG bias = TIME_GetBias(); - RtlSecondsSince1970ToFileTime( time1 - bias, ft ); - - - TRACEN((printf("DosDateTimeToFileTime(%ld,%ld) t1=%ld => %lx %lx\n", - (long)fatdate,(long)fattime,(long)time1, - (long)ft->dwHighDateTime,(long)ft->dwLowDateTime))) - - return TRUE; -} -*/ - -BOOLEAN WINAPI RtlTimeToSecondsSince1970( const LARGE_INTEGER *Time, DWORD *Seconds ) { - ULONGLONG tmp = Time->QuadPart; - TRACEN((printf("RtlTimeToSecondsSince1970-1 %llx\n",tmp))) - tmp /= TICKSPERSEC; - tmp -= SECS_1601_TO_1970; - TRACEN((printf("RtlTimeToSecondsSince1970-2 %llx\n",tmp))) - if (tmp > 0xffffffff) return FALSE; - *Seconds = (DWORD)tmp; - return TRUE; -} - -BOOL WINAPI FileTimeToDosDateTime( const FILETIME *ft, WORD *fatdate, WORD *fattime ) { - LARGE_INTEGER li; - ULONG t; - time_t unixtime; - struct tm* tm; - WORD fat_d,fat_t; - - TRACEN((printf("FileTimeToDosDateTime\n"))) - li.QuadPart = ft->dwHighDateTime; - li.QuadPart = (li.QuadPart << 32) | ft->dwLowDateTime; - RtlTimeToSecondsSince1970( &li, &t ); - unixtime = t; /* unixtime = t; * FIXME unixtime = t - TIME_GetBias(); */ - - tm = gmtime( &unixtime ); - - fat_t = (tm->tm_hour << 11) + (tm->tm_min << 5) + (tm->tm_sec / 2); - fat_d = ((tm->tm_year - 80) << 9) + ((tm->tm_mon + 1) << 5) + tm->tm_mday; - if (fattime) - *fattime = fat_t; - if (fatdate) - *fatdate = fat_d; - - TRACEN((printf("FileTimeToDosDateTime : %lx %lx => %d %d\n", - (long)ft->dwHighDateTime,(long)ft->dwLowDateTime,(unsigned)fat_d,(unsigned)fat_t))) - - return TRUE; -} - -BOOL WINAPI FileTimeToLocalFileTime( const FILETIME *utcft, FILETIME * localft ) { - LARGE_INTEGER local, utc; - - TRACEN((printf("FileTimeToLocalFileTime\n"))) - utc.QuadPart = utcft->dwHighDateTime; - utc.QuadPart = (utc.QuadPart << 32) | utcft->dwLowDateTime; - RtlSystemTimeToLocalTime( &utc, &local ); - localft->dwLowDateTime = (DWORD)local.QuadPart; - localft->dwHighDateTime = (DWORD)(local.QuadPart >> 32); - - return TRUE; -} - -typedef struct _TIME_FIELDS { - CSHORT Year; - CSHORT Month; - CSHORT Day; - CSHORT Hour; - CSHORT Minute; - CSHORT Second; - CSHORT Milliseconds; - CSHORT Weekday; -} TIME_FIELDS; - -static const int MonthLengths[2][MONSPERYEAR] = -{ - { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, - { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } -}; - -static inline int IsLeapYear(int Year) { - return Year % 4 == 0 && (Year % 100 != 0 || Year % 400 == 0) ? 1 : 0; -} - -static inline VOID WINAPI RtlTimeToTimeFields( - const LARGE_INTEGER *liTime, - TIME_FIELDS * TimeFields) { - int SecondsInDay; - long int cleaps, years, yearday, months; - long int Days; - LONGLONG Time; - - /* Extract millisecond from time and convert time into seconds */ - TimeFields->Milliseconds = - (CSHORT) (( liTime->QuadPart % TICKSPERSEC) / TICKSPERMSEC); - Time = liTime->QuadPart / TICKSPERSEC; - - /* The native version of RtlTimeToTimeFields does not take leap seconds - * into account */ - - /* Split the time into days and seconds within the day */ - Days = Time / SECSPERDAY; - SecondsInDay = Time % SECSPERDAY; - - /* compute time of day */ - TimeFields->Hour = (CSHORT) (SecondsInDay / SECSPERHOUR); - SecondsInDay = SecondsInDay % SECSPERHOUR; - TimeFields->Minute = (CSHORT) (SecondsInDay / SECSPERMIN); - TimeFields->Second = (CSHORT) (SecondsInDay % SECSPERMIN); - - /* compute day of week */ - TimeFields->Weekday = (CSHORT) ((EPOCHWEEKDAY + Days) % DAYSPERWEEK); - - /* compute year, month and day of month. */ - cleaps=( 3 * ((4 * Days + 1227) / DAYSPERQUADRICENTENNIUM) + 3 ) / 4; - Days += 28188 + cleaps; - years = (20 * Days - 2442) / (5 * DAYSPERNORMALQUADRENNIUM); - yearday = Days - (years * DAYSPERNORMALQUADRENNIUM)/4; - months = (64 * yearday) / 1959; - /* the result is based on a year starting on March. - * To convert take 12 from Januari and Februari and - * increase the year by one. */ - if( months < 14 ) { - TimeFields->Month = months - 1; - TimeFields->Year = years + 1524; - } else { - TimeFields->Month = months - 13; - TimeFields->Year = years + 1525; - } - /* calculation of day of month is based on the wonderful - * sequence of INT( n * 30.6): it reproduces the - * 31-30-31-30-31-31 month lengths exactly for small n's */ - TimeFields->Day = yearday - (1959 * months) / 64 ; -} - - -BOOL WINAPI FileTimeToSystemTime( const FILETIME *ft, SYSTEMTIME * syst ) { - TIME_FIELDS tf; - LARGE_INTEGER t; - - TRACEN((printf("FileTimeToSystemTime\n"))) - t.QuadPart = ft->dwHighDateTime; - t.QuadPart = (t.QuadPart << 32) | ft->dwLowDateTime; - RtlTimeToTimeFields(&t, &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; -} - - -static inline NTSTATUS WINAPI RtlLocalTimeToSystemTime( const LARGE_INTEGER *LocalTime, - LARGE_INTEGER *SystemTime) { - - TRACEN((printf("RtlLocalTimeToSystemTime\n"))) - LONG bias = TIME_GetBias(); - SystemTime->QuadPart = LocalTime->QuadPart + bias * (LONGLONG)TICKSPERSEC; - return STATUS_SUCCESS; -} - -BOOL WINAPI LocalFileTimeToFileTime( const FILETIME *localft, FILETIME * utcft ) { - LARGE_INTEGER local, utc; - - TRACEN((printf("LocalFileTimeToFileTime\n"))) - local.QuadPart = localft->dwHighDateTime; - local.QuadPart = (local.QuadPart << 32) | localft->dwLowDateTime; - RtlLocalTimeToSystemTime( &local, &utc ); - utcft->dwLowDateTime = (DWORD)utc.QuadPart; - utcft->dwHighDateTime = (DWORD)(utc.QuadPart >> 32); - - return TRUE; -} - -/********************************************************************* - * GetSystemTime (KERNEL32.@) - * - * Get the current system time. - * - * RETURNS - * Nothing. - */ -VOID WINAPI GetSystemTime(SYSTEMTIME * systime) /* [O] Destination for current time */ -{ - FILETIME ft; - LARGE_INTEGER t; - - TRACEN((printf("GetSystemTime\n"))) - - struct timeval now; - gettimeofday( &now, 0 ); - t.QuadPart = now.tv_sec * (ULONGLONG)TICKSPERSEC + TICKS_1601_TO_1970; - t.QuadPart += now.tv_usec * 10; - - ft.dwLowDateTime = (DWORD)(t.QuadPart); - ft.dwHighDateTime = (DWORD)(t.QuadPart >> 32); - FileTimeToSystemTime(&ft, systime); -} - -/****************************************************************************** - * RtlTimeFieldsToTime [NTDLL.@] - * - * Convert a TIME_FIELDS structure into a time. - * - * PARAMS - * ftTimeFields [I] TIME_FIELDS structure to convert. - * Time [O] Destination for the converted time. - * - * RETURNS - * Success: TRUE. - * Failure: FALSE. - */ -static BOOLEAN WINAPI RtlTimeFieldsToTime( - TIME_FIELDS * tfTimeFields, - LARGE_INTEGER *Time) -{ - int month, year, cleaps, day; - - TRACEN((printf("RtlTimeFieldsToTime\n"))) - - /* FIXME: normalize the TIME_FIELDS structure here */ - /* No, native just returns 0 (error) if the fields are not */ - if( tfTimeFields->Milliseconds< 0 || tfTimeFields->Milliseconds > 999 || - tfTimeFields->Second < 0 || tfTimeFields->Second > 59 || - tfTimeFields->Minute < 0 || tfTimeFields->Minute > 59 || - tfTimeFields->Hour < 0 || tfTimeFields->Hour > 23 || - tfTimeFields->Month < 1 || tfTimeFields->Month > 12 || - tfTimeFields->Day < 1 || - tfTimeFields->Day > MonthLengths - [ tfTimeFields->Month ==2 || IsLeapYear(tfTimeFields->Year)] - [ tfTimeFields->Month - 1] || - tfTimeFields->Year < 1601 ) - return FALSE; - - /* now calculate a day count from the date - * First start counting years from March. This way the leap days - * are added at the end of the year, not somewhere in the middle. - * Formula's become so much less complicate that way. - * To convert: add 12 to the month numbers of Jan and Feb, and - * take 1 from the year */ - if(tfTimeFields->Month < 3) { - month = tfTimeFields->Month + 13; - year = tfTimeFields->Year - 1; - } else { - month = tfTimeFields->Month + 1; - year = tfTimeFields->Year; - } - cleaps = (3 * (year / 100) + 3) / 4; /* nr of "century leap years"*/ - day = (36525 * year) / 100 - cleaps + /* year * dayperyr, corrected */ - (1959 * month) / 64 + /* months * daypermonth */ - tfTimeFields->Day - /* day of the month */ - 584817 ; /* zero that on 1601-01-01 */ - /* done */ - - Time->QuadPart = (((((LONGLONG) day * HOURSPERDAY + - tfTimeFields->Hour) * MINSPERHOUR + - tfTimeFields->Minute) * SECSPERMIN + - tfTimeFields->Second ) * 1000 + - tfTimeFields->Milliseconds ) * TICKSPERMSEC; - - return TRUE; -} - -/********************************************************************* - * SystemTimeToFileTime (KERNEL32.@) - */ -BOOL WINAPI SystemTimeToFileTime( const SYSTEMTIME *syst, FILETIME * ft ) { - TIME_FIELDS tf; - LARGE_INTEGER t; - - TRACEN((printf("SystemTimeToFileTime\n"))) - - 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, &t); - ft->dwLowDateTime = (DWORD)t.QuadPart; - ft->dwHighDateTime = (DWORD)(t.QuadPart>>32); - return TRUE; -} - diff --git a/src/libs/7zip/unix/unix.pri b/src/libs/7zip/unix/unix.pri index f6c805629..1758357f5 100644 --- a/src/libs/7zip/unix/unix.pri +++ b/src/libs/7zip/unix/unix.pri @@ -129,4 +129,4 @@ SOURCES += $$7ZIP_BASE/C/XzEnc.c SOURCES += $$7ZIP_BASE/C/Sha256.c SOURCES += \ -$$7ZIP_BASE/CPP/myWindows/wine_date_and_time.cpp +$$7ZIP_BASE/CPP/myWindows/myDateAndTime.cpp -- cgit v1.2.3