diff options
author | drh <drh@noemail.net> | 2018-01-23 15:26:30 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2018-01-23 15:26:30 +0000 |
commit | 61d04974f06ad307a56442602c910783f7fa02a0 (patch) | |
tree | 3aae383a848be1e4f6540851ab29069c9dec58ba /ext/misc/fileio.c | |
parent | b8fff29c68cdb68b472051c6f892216e388196d9 (diff) | |
download | sqlite-61d04974f06ad307a56442602c910783f7fa02a0.tar.gz sqlite-61d04974f06ad307a56442602c910783f7fa02a0.zip |
Fix the modification-time setting logic in the fileio.c extension on Windows
so that it works with utf8 filenames.
FossilOrigin-Name: f785b9041556912edbacdbfb3dfc38705058d7c10d874544295c25db54628bc2
Diffstat (limited to 'ext/misc/fileio.c')
-rw-r--r-- | ext/misc/fileio.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/ext/misc/fileio.c b/ext/misc/fileio.c index 60a960f31..e51b3e620 100644 --- a/ext/misc/fileio.c +++ b/ext/misc/fileio.c @@ -270,15 +270,20 @@ static int writeFile( SYSTEMTIME currentTime; LONGLONG intervals; HANDLE hFile; + LPWSTR zUnicodeName; + extern LPWSTR sqlite3_win32_utf8_to_unicode(const char*); + GetSystemTime(¤tTime); SystemTimeToFileTime(¤tTime, &lastAccess); intervals = Int32x32To64(mtime, 10000000) + 116444736000000000; lastWrite.dwLowDateTime = (DWORD)intervals; lastWrite.dwHighDateTime = intervals >> 32; - hFile = CreateFile( - zFile, FILE_WRITE_ATTRIBUTES, 0, NULL, OPEN_EXISTING, + zUnicodeName = sqlite3_win32_utf8_to_unicode(zFile); + hFile = CreateFileW( + zUnicodeName, FILE_WRITE_ATTRIBUTES, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL ); + sqlite3_free(zUnicodeName); if( hFile!=INVALID_HANDLE_VALUE ){ BOOL bResult = SetFileTime(hFile, NULL, &lastAccess, &lastWrite); CloseHandle(hFile); |