aboutsummaryrefslogtreecommitdiff
path: root/ext/misc/fileio.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2018-01-23 15:26:30 +0000
committerdrh <drh@noemail.net>2018-01-23 15:26:30 +0000
commit61d04974f06ad307a56442602c910783f7fa02a0 (patch)
tree3aae383a848be1e4f6540851ab29069c9dec58ba /ext/misc/fileio.c
parentb8fff29c68cdb68b472051c6f892216e388196d9 (diff)
downloadsqlite-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.c9
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(&currentTime);
SystemTimeToFileTime(&currentTime, &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);