diff options
author | Daniel Wilhelm <daniel@wili.li> | 2014-04-18 17:15:16 +0200 |
---|---|---|
committer | Daniel Wilhelm <daniel@wili.li> | 2014-04-18 17:15:16 +0200 |
commit | bd6336c629841c6db3a6ca53a936d629d34db53b (patch) | |
tree | 3721ef997864108df175ce677a8a7d4342a6f1d2 /zen/dst_hack.h | |
parent | 4.0 (diff) | |
download | FreeFileSync-bd6336c629841c6db3a6ca53a936d629d34db53b.tar.gz FreeFileSync-bd6336c629841c6db3a6ca53a936d629d34db53b.tar.bz2 FreeFileSync-bd6336c629841c6db3a6ca53a936d629d34db53b.zip |
4.1
Diffstat (limited to 'zen/dst_hack.h')
-rw-r--r-- | zen/dst_hack.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/zen/dst_hack.h b/zen/dst_hack.h new file mode 100644 index 00000000..07d08dc5 --- /dev/null +++ b/zen/dst_hack.h @@ -0,0 +1,40 @@ +#ifndef DST_HACK_H_INCLUDED +#define DST_HACK_H_INCLUDED + +#include "win.h" //includes "windows.h" +#include "zstring.h" +#include <stdexcept> + + +namespace dst +{ +/* +Solve DST +-1h and time zone shift issues on FAT drives +------------------------------------------------------- +- (local) last write time is not touched! +- all additional metadata is encoded in local create time: + I. indicator that offset in II) is present + II. local<->UTC time offset + III. indicator that offset in II) corresponds to current local write time (a hash of local last write time) +*/ + +bool isFatDrive(const Zstring& fileName); //throw () +bool isFatDrive(HANDLE hFile); //throw() -> call ONLY if vistaOrLater() == true! +bool vistaOrLater(); + +//all subsequent functions may throw the std::runtime_error exception! + +struct RawTime //time as retrieved by ::FindFirstFile() and ::GetFileAttributesEx() +{ + RawTime(const FILETIME& create, const FILETIME& lastWrite) : createTimeRaw(create), writeTimeRaw(lastWrite) {} + FILETIME createTimeRaw; + FILETIME writeTimeRaw; +}; +//save UTC time resistant against DST/time zone shifts +bool fatHasUtcEncoded(const RawTime& rawTime); //as retrieved by ::FindFirstFile() and ::GetFileAttributesEx(); throw (std::runtime_error) + +RawTime fatEncodeUtcTime(const FILETIME& writeTimeRealUtc); //throw (std::runtime_error) +FILETIME fatDecodeUtcTime(const RawTime& rawTime); //return last write time in real UTC; throw (std::runtime_error) +} + +#endif // DST_HACK_H_INCLUDED |