From e4127b84aa3e034b2e2c311548b30c20a63f086e Mon Sep 17 00:00:00 2001 From: Enrico Giordani Date: Tue, 1 Sep 2015 13:55:03 +0200 Subject: [PATCH] [Fix] Close the file handle after truncating a file. --- src/Win32_Interop/win32fixes.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/Win32_Interop/win32fixes.c b/src/Win32_Interop/win32fixes.c index 6d44cf5e..32a05028 100644 --- a/src/Win32_Interop/win32fixes.c +++ b/src/Win32_Interop/win32fixes.c @@ -661,23 +661,28 @@ char *ctime_r(const time_t *clock, char *buf) { } int truncate(const char *path, PORT_LONGLONG length) { - LARGE_INTEGER newSize; - HANDLE toTruncate; - toTruncate = CreateFileA(path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); + HANDLE toTruncate = CreateFileA(path, + GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_WRITE | FILE_SHARE_READ, + NULL, + OPEN_EXISTING, + 0, + NULL); if (toTruncate != INVALID_HANDLE_VALUE) { + int result = 0; + LARGE_INTEGER newSize; newSize.QuadPart = length; - if (FALSE == (SetFilePointerEx(toTruncate, newSize, NULL, FILE_BEGIN) && SetEndOfFile(toTruncate))) { + if (FALSE == (SetFilePointerEx(toTruncate, newSize, NULL, FILE_BEGIN) + && SetEndOfFile(toTruncate))) { errno = ENOENT; - return -1; - } else { - return 0; + result = -1; } + CloseHandle(toTruncate); + return result; } else { errno = ENOENT; return -1; } } - - #endif