From e4973b32624a774ae6c8a6767d4de7e2d0d73a85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Sat, 28 Jan 2023 22:05:23 +0800 Subject: [PATCH] IO: fix Windows part; silense warnings --- src/common/io/io.h | 37 +++++++++++++++++++++++++++++++++---- src/common/io/io_unix.c | 2 +- src/common/io/io_windows.c | 10 +++++----- src/logo/image/image.c | 6 +++--- 4 files changed, 42 insertions(+), 13 deletions(-) diff --git a/src/common/io/io.h b/src/common/io/io.h index 25762a51b..9c135f5fd 100644 --- a/src/common/io/io.h +++ b/src/common/io/io.h @@ -7,22 +7,37 @@ #ifdef _WIN32 #include + #include typedef HANDLE FFNativeFD; #else #include typedef int FFNativeFD; #endif -static inline bool ffWriteFDBuffer(FFNativeFD fd, const FFstrbuf* content) +static inline FFNativeFD FFUnixFD2NativeFD(int unixfd) { #ifndef _WIN32 - return write(fd, content->chars, content->length) != -1; + return unixfd; + #else + return (FFNativeFD) _get_osfhandle(unixfd); + #endif +} + +static inline bool ffWriteFDData(FFNativeFD fd, size_t dataSize, const void* data) +{ + #ifndef _WIN32 + return write(fd, data, dataSize) != -1; #else DWORD written; - return WriteFile(fd, content->chars, content->length, &written, NULL) && written == content->length; + return WriteFile(fd, data, (DWORD) dataSize, &written, NULL) && written == dataSize; #endif } +static inline bool ffWriteFDBuffer(FFNativeFD fd, const FFstrbuf* content) +{ + return ffWriteFDData(fd, content->length, content->chars); +} + bool ffWriteFileData(const char* fileName, size_t dataSize, const void* data); static inline bool ffWriteFileBuffer(const char* fileName, const FFstrbuf* buffer) @@ -30,8 +45,22 @@ static inline bool ffWriteFileBuffer(const char* fileName, const FFstrbuf* buffe return ffWriteFileData(fileName, buffer->length, buffer->chars); } -bool ffAppendFDBuffer(FFNativeFD fd, FFstrbuf* buffer); +static inline ssize_t ffReadFDData(FFNativeFD fd, size_t dataSize, void* data) +{ + #ifndef _WIN32 + return read(fd, data, dataSize); + #else + DWORD readed; + if(!ReadFile(fd, data, (DWORD)dataSize, &readed, NULL)) + return -1; + + return (ssize_t)readed; + #endif +} + ssize_t ffReadFileData(const char* fileName, size_t dataSize, void* data); + +bool ffAppendFDBuffer(FFNativeFD fd, FFstrbuf* buffer); bool ffAppendFileBuffer(const char* fileName, FFstrbuf* buffer); static inline bool ffReadFileBuffer(const char* fileName, FFstrbuf* buffer) diff --git a/src/common/io/io_unix.c b/src/common/io/io_unix.c index c4846525f..79dcd7e04 100644 --- a/src/common/io/io_unix.c +++ b/src/common/io/io_unix.c @@ -80,7 +80,7 @@ ssize_t ffReadFileData(const char* fileName, size_t dataSize, void* data) if(fd == -1) return -1; - ssize_t readed = read(fd, data, dataSize); + ssize_t readed = ffReadFDData(fd, dataSize, data); close(fd); diff --git a/src/common/io/io_windows.c b/src/common/io/io_windows.c index 7ac79c392..56d6ccf60 100644 --- a/src/common/io/io_windows.c +++ b/src/common/io/io_windows.c @@ -71,13 +71,13 @@ ssize_t ffReadFileData(const char* fileName, size_t dataSize, void* data) { HANDLE handle = CreateFileA(fileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(handle == INVALID_HANDLE_VALUE) - return false; - - DWORD readed; - if(!ReadFile(handle, data, (DWORD)dataSize, &readed, NULL)) return -1; - return (ssize_t)readed; + ssize_t readed = ffReadFDData(handle, dataSize, data); + + CloseHandle(handle); + + return readed; } bool ffAppendFileBuffer(const char* fileName, FFstrbuf* buffer) diff --git a/src/logo/image/image.c b/src/logo/image/image.c index 25df0e9ff..96be2d049 100644 --- a/src/logo/image/image.c +++ b/src/logo/image/image.c @@ -229,7 +229,7 @@ static void printImagePixels(FFinstance* instance, FFLogoRequestData* requestDat ffPrintCharTimes('\n', instance->config.logo.paddingTop); ffPrintCharTimes(' ', instance->config.logo.paddingLeft); fflush(stdout); - ffWriteFDBuffer(STDOUT_FILENO, result); + ffWriteFDBuffer(FFUnixFD2NativeFD(STDOUT_FILENO), result); //Go to upper left corner fputs("\033[9999999D", stdout); @@ -614,8 +614,8 @@ static bool printCachedPixel(FFinstance* instance, FFLogoRequestData* requestDat char buffer[32768]; ssize_t readBytes; - while((readBytes = read(fd, buffer, sizeof(buffer))) > 0) - FF_UNUSED(write(STDOUT_FILENO, buffer, (size_t) readBytes)); + while((readBytes = ffReadFDData(FFUnixFD2NativeFD(fd), sizeof(buffer), buffer)) > 0) + ffWriteFDData(FFUnixFD2NativeFD(STDOUT_FILENO), (size_t) readBytes, buffer); close(fd);