mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-31 09:32:11 +00:00
Don't cast Win32 FILETIME structs to int64. Patch by Dimitry Andric!
According to the Microsoft documentation here: http://msdn.microsoft.com/en-us/library/ms724284%28VS.85%29.aspx this cast used in lib/System/Win32/Path.inc: __int64 ft = *reinterpret_cast<__int64*>(&fi.ftLastWriteTime); should not be done. The documentation says: "Do not cast a pointer to a FILETIME structure to either a ULARGE_INTEGER* or __int64* value because it can cause alignment faults on 64-bit Windows." git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112376 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
885b661e10
commit
44edb0bd0c
@ -400,8 +400,10 @@ PathWithStatus::getFileStatus(bool update, std::string *ErrStr) const {
|
||||
for (unsigned i = 0; i < path.length(); ++i)
|
||||
status.uniqueID += path[i];
|
||||
|
||||
__int64 ft = *reinterpret_cast<__int64*>(&fi.ftLastWriteTime);
|
||||
status.modTime.fromWin32Time(ft);
|
||||
ULARGE_INTEGER ui;
|
||||
ui.LowPart = fi.ftLastWriteTime.dwLowDateTime;
|
||||
ui.HighPart = fi.ftLastWriteTime.dwHighDateTime;
|
||||
status.modTime.fromWin32Time(ui.QuadPart);
|
||||
|
||||
status.isDir = fi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
|
||||
fsIsValid = true;
|
||||
@ -777,8 +779,11 @@ Path::setStatusInfoOnDisk(const FileStatus &si, std::string *ErrMsg) const {
|
||||
return MakeErrMsg(ErrMsg, path + ": GetFileInformationByHandle: ");
|
||||
}
|
||||
|
||||
ULARGE_INTEGER ui;
|
||||
ui.QuadPart = si.modTime.toWin32Time();
|
||||
FILETIME ft;
|
||||
(uint64_t&)ft = si.modTime.toWin32Time();
|
||||
ft.dwLowDateTime = ui.LowPart;
|
||||
ft.dwHighDateTime = ui.HighPart;
|
||||
BOOL ret = SetFileTime(h, NULL, &ft, &ft);
|
||||
DWORD err = GetLastError();
|
||||
CloseHandle(h);
|
||||
|
Loading…
Reference in New Issue
Block a user