Skip to content

Commit bbb729c

Browse files
authored
Merge pull request #11566 from ljaeh0121/feature/add-FileFlushFileBuffers
[winpr,file] Add implemetation of FileFlushFileBuffers
2 parents 27d9a1e + 2a7f7c0 commit bbb729c

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

winpr/libwinpr/file/file.c

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,32 @@ static DWORD FileGetFileSize(HANDLE Object, LPDWORD lpFileSizeHigh)
342342
return (UINT32)(size & 0xFFFFFFFF);
343343
}
344344

345+
static BOOL FileFlushFileBuffers(HANDLE hFile)
346+
{
347+
WINPR_FILE* pFile = (WINPR_FILE*)hFile;
348+
349+
if (!pFile->fp)
350+
{
351+
SetLastError(ERROR_INVALID_HANDLE);
352+
return FALSE;
353+
}
354+
355+
// See: https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-flushfilebuffers
356+
if ((pFile->dwOpenMode & GENERIC_WRITE) == 0)
357+
{
358+
SetLastError(STATUS_ACCESS_DENIED);
359+
return FALSE;
360+
}
361+
362+
if (fflush(pFile->fp) != 0)
363+
{
364+
SetLastError(map_posix_err(errno));
365+
return FALSE;
366+
}
367+
368+
return TRUE;
369+
}
370+
345371
static BOOL FileGetFileInformationByHandle(HANDLE hFile,
346372
LPBY_HANDLE_FILE_INFORMATION lpFileInformation)
347373
{
@@ -707,7 +733,7 @@ static HANDLE_OPS fileOps = {
707733
NULL, /* FileWriteEx */
708734
NULL, /* FileWriteGather */
709735
FileGetFileSize,
710-
NULL, /* FlushFileBuffers */
736+
FileFlushFileBuffers,
711737
FileSetEndOfFile,
712738
FileSetFilePointer,
713739
FileSetFilePointerEx,

0 commit comments

Comments
 (0)