IO: fix Windows part; silense warnings

This commit is contained in:
李通洲
2023-01-28 22:05:23 +08:00
parent a1ea7804f3
commit e4973b3262
4 changed files with 42 additions and 13 deletions
+33 -4
View File
@@ -7,22 +7,37 @@
#ifdef _WIN32
#include <fileapi.h>
#include <io.h>
typedef HANDLE FFNativeFD;
#else
#include <unistd.h>
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)
+1 -1
View File
@@ -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);
+5 -5
View File
@@ -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)
+3 -3
View File
@@ -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);