~ubuntu-branches/ubuntu/vivid/unrar-nonfree/vivid

« back to all changes in this revision

Viewing changes to timefn.cpp

  • Committer: Package Import Robot
  • Author(s): Martin Meredith
  • Date: 2015-02-03 12:58:01 UTC
  • mfrom: (1.1.18) (5.1.18 sid)
  • Revision ID: package-import@ubuntu.com-20150203125801-od6ev8cqy1er51vz
Tags: 1:5.2.5-1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#include "rar.hpp"
2
2
 
3
 
RarTime::RarTime()
4
 
{
5
 
  Reset();
6
 
}
7
 
 
8
3
#ifdef _WIN_ALL
9
4
RarTime& RarTime::operator =(FILETIME &ft)
10
5
{
46
41
  FILETIME ft;
47
42
  GetWin32(&ft);
48
43
  FILETIME lft;
49
 
  FileTimeToLocalFileTime(&ft,&lft);
 
44
 
 
45
  if (WinNT() < WNT_VISTA)
 
46
  {
 
47
    // SystemTimeToTzSpecificLocalTime based code produces 1 hour error on XP.
 
48
    FileTimeToLocalFileTime(&ft,&lft);
 
49
  }
 
50
  else
 
51
  {
 
52
    // We use these functions instead of FileTimeToLocalFileTime according to
 
53
    // MSDN recommendation: "To account for daylight saving time
 
54
    // when converting a file time to a local time ..."
 
55
    SYSTEMTIME st1,st2;
 
56
    FileTimeToSystemTime(&ft,&st1);
 
57
    SystemTimeToTzSpecificLocalTime(NULL,&st1,&st2);
 
58
    SystemTimeToFileTime(&st2,&lft);
 
59
 
 
60
    // Correct precision loss (low 4 decimal digits) in FileTimeToSystemTime.
 
61
    FILETIME rft;
 
62
    SystemTimeToFileTime(&st1,&rft);
 
63
    int64 Corrected=INT32TO64(ft.dwHighDateTime,ft.dwLowDateTime)-
 
64
                    INT32TO64(rft.dwHighDateTime,rft.dwLowDateTime)+
 
65
                    INT32TO64(lft.dwHighDateTime,lft.dwLowDateTime);
 
66
    lft.dwLowDateTime=(DWORD)Corrected;
 
67
    lft.dwHighDateTime=(DWORD)(Corrected>>32);
 
68
  }
 
69
 
50
70
  SYSTEMTIME st;
51
71
  FileTimeToSystemTime(&lft,&st);
52
72
  lt->Year=st.wYear;
84
104
  lt->Hour=t->tm_hour;
85
105
  lt->Minute=t->tm_min;
86
106
  lt->Second=t->tm_sec;
87
 
  lt->Reminder=0;
 
107
  lt->Reminder=itime % 10000000;
88
108
  lt->wDay=t->tm_wday;
89
109
  lt->yDay=t->tm_yday;
90
110
#endif
108
128
    lft.dwLowDateTime+=lt->Reminder;
109
129
    if (lft.dwLowDateTime<lt->Reminder)
110
130
      lft.dwHighDateTime++;
 
131
 
111
132
    FILETIME ft;
112
 
    LocalFileTimeToFileTime(&lft,&ft);
 
133
 
 
134
    if (WinNT() < WNT_VISTA)
 
135
    {
 
136
      // TzSpecificLocalTimeToSystemTime based code produces 1 hour error on XP.
 
137
      LocalFileTimeToFileTime(&lft,&ft);
 
138
    }
 
139
    else
 
140
    {
 
141
      // Reverse procedure which we do in GetLocal.
 
142
      SYSTEMTIME st1,st2;
 
143
      FileTimeToSystemTime(&lft,&st2);
 
144
      TzSpecificLocalTimeToSystemTime(NULL,&st2,&st1);
 
145
      SystemTimeToFileTime(&st1,&ft);
 
146
 
 
147
      // Correct precision loss (low 4 decimal digits) in FileTimeToSystemTime.
 
148
      FILETIME rft;
 
149
      SystemTimeToFileTime(&st2,&rft);
 
150
      int64 Corrected=INT32TO64(lft.dwHighDateTime,lft.dwLowDateTime)-
 
151
                      INT32TO64(rft.dwHighDateTime,rft.dwLowDateTime)+
 
152
                      INT32TO64(ft.dwHighDateTime,ft.dwLowDateTime);
 
153
      ft.dwLowDateTime=(DWORD)Corrected;
 
154
      ft.dwHighDateTime=(DWORD)(Corrected>>32);
 
155
    }
 
156
 
113
157
    *this=ft;
114
158
  }
115
159
  else
125
169
  t.tm_year=lt->Year-1900;
126
170
  t.tm_isdst=-1;
127
171
  *this=mktime(&t);
 
172
  itime+=lt->Reminder;
128
173
#endif
129
174
}
130
175
 
250
295
    }
251
296
  }
252
297
  SetCurrentTime();
253
 
  int64 RawTime=GetRaw();
254
298
  SetRaw(itime-uint64(Seconds)*10000000);
255
299
}
256
300
#endif
275
319
#ifndef SFX_MODULE
276
320
const wchar *GetMonthName(int Month)
277
321
{
278
 
#ifdef SILENT
279
 
  return L"";
280
 
#else
281
 
  static MSGID MonthID[]={
282
 
         MMonthJan,MMonthFeb,MMonthMar,MMonthApr,MMonthMay,MMonthJun,
283
 
         MMonthJul,MMonthAug,MMonthSep,MMonthOct,MMonthNov,MMonthDec
284
 
  };
285
 
  return St(MonthID[Month]);
286
 
#endif
 
322
  return uiGetMonthName(Month);
287
323
}
288
324
#endif
289
325