aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Green <andy@warmcat.com>2021-11-07 07:19:21 +0000
committerAndy Green <andy@warmcat.com>2021-11-22 17:23:12 +0000
commit741cf67b7fc66857332c29bc165bada0a03c8309 (patch)
treef8fe687dfe82df61119c00af375de008cf7342ea
parentc295f8014ad88a3bdf833abd772375c92eb1d484 (diff)
downloadlibwebsockets-741cf67b7fc66857332c29bc165bada0a03c8309.tar.gz
windows: mingw file type is int (v2)
-rw-r--r--include/libwebsockets.h8
-rw-r--r--lib/plat/windows/private-lib-plat-windows.h4
-rw-r--r--lib/plat/windows/windows-file.c19
3 files changed, 24 insertions, 7 deletions
diff --git a/include/libwebsockets.h b/include/libwebsockets.h
index bc7407c9..4409ee27 100644
--- a/include/libwebsockets.h
+++ b/include/libwebsockets.h
@@ -125,7 +125,11 @@ typedef int suseconds_t;
#define LWS_EXTERN
#endif
+#if defined(__MINGW32__)
+#define LWS_INVALID_FILE -1
+#else
#define LWS_INVALID_FILE INVALID_HANDLE_VALUE
+#endif
#define LWS_SOCK_INVALID (INVALID_SOCKET)
#define LWS_O_RDONLY _O_RDONLY
#define LWS_O_WRONLY _O_WRONLY
@@ -383,7 +387,11 @@ struct lws;
#if defined(_WIN32)
#if !defined(LWS_WIN32_HANDLE_TYPES)
typedef SOCKET lws_sockfd_type;
+#if defined(__MINGW32__)
typedef int lws_filefd_type;
+#else
+typedef HANDLE lws_filefd_type;
+#endif
#endif
diff --git a/lib/plat/windows/private-lib-plat-windows.h b/lib/plat/windows/private-lib-plat-windows.h
index f2e93f31..18d87ac2 100644
--- a/lib/plat/windows/private-lib-plat-windows.h
+++ b/lib/plat/windows/private-lib-plat-windows.h
@@ -155,7 +155,11 @@ struct lws_fd_hashtable {
#endif
typedef SOCKET lws_sockfd_type;
+#if defined(__MINGW32__)
typedef int lws_filefd_type;
+#else
+typedef HANDLE lws_filefd_type;
+#endif
#define LWS_WIN32_HANDLE_TYPES
LWS_EXTERN struct lws *
diff --git a/lib/plat/windows/windows-file.c b/lib/plat/windows/windows-file.c
index d768b284..27b0a9cc 100644
--- a/lib/plat/windows/windows-file.c
+++ b/lib/plat/windows/windows-file.c
@@ -50,7 +50,7 @@ _lws_plat_file_open(const struct lws_plat_file_ops *fops, const char *filename,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
}
- if (ret == LWS_INVALID_FILE)
+ if (ret == NULL)
goto bail;
fop_fd = malloc(sizeof(*fop_fd));
@@ -58,8 +58,13 @@ _lws_plat_file_open(const struct lws_plat_file_ops *fops, const char *filename,
goto bail;
fop_fd->fops = fops;
+#if defined(__MINGW32__)
+ /* we use filesystem_priv */
+ fop_fd->fd = (int)(intptr_t)ret;
+#else
fop_fd->fd = ret;
- fop_fd->filesystem_priv = NULL; /* we don't use it */
+#endif
+ fop_fd->filesystem_priv = ret;
fop_fd->flags = *flags;
fop_fd->len = GetFileSize(ret, NULL);
if(GetFileSizeEx(ret, &llFileSize))
@@ -76,7 +81,7 @@ bail:
int
_lws_plat_file_close(lws_fop_fd_t *fop_fd)
{
- HANDLE fd = (*fop_fd)->fd;
+ HANDLE fd = (*fop_fd)->filesystem_priv;
free(*fop_fd);
*fop_fd = NULL;
@@ -92,7 +97,7 @@ _lws_plat_file_seek_cur(lws_fop_fd_t fop_fd, lws_fileofs_t offset)
LARGE_INTEGER l;
l.QuadPart = offset;
- if (!SetFilePointerEx((HANDLE)fop_fd->fd, l, NULL, FILE_CURRENT))
+ if (!SetFilePointerEx((HANDLE)fop_fd->filesystem_priv, l, NULL, FILE_CURRENT))
{
lwsl_err("error seeking from cur %ld, offset %ld\n", (long)fop_fd->pos, (long)offset);
return -1;
@@ -101,7 +106,7 @@ _lws_plat_file_seek_cur(lws_fop_fd_t fop_fd, lws_fileofs_t offset)
LARGE_INTEGER zero;
zero.QuadPart = 0;
LARGE_INTEGER newPos;
- if (!SetFilePointerEx((HANDLE)fop_fd->fd, zero, &newPos, FILE_CURRENT))
+ if (!SetFilePointerEx((HANDLE)fop_fd->filesystem_priv, zero, &newPos, FILE_CURRENT))
{
lwsl_err("error seeking from cur %ld, offset %ld\n", (long)fop_fd->pos, (long)offset);
return -1;
@@ -117,7 +122,7 @@ _lws_plat_file_read(lws_fop_fd_t fop_fd, lws_filepos_t *amount,
{
DWORD _amount;
- if (!ReadFile((HANDLE)fop_fd->fd, buf, (DWORD)len, &_amount, NULL)) {
+ if (!ReadFile((HANDLE)fop_fd->filesystem_priv, buf, (DWORD)len, &_amount, NULL)) {
*amount = 0;
return 1;
@@ -135,7 +140,7 @@ _lws_plat_file_write(lws_fop_fd_t fop_fd, lws_filepos_t *amount,
{
DWORD _amount;
- if (!WriteFile((HANDLE)fop_fd->fd, buf, (DWORD)len, &_amount, NULL)) {
+ if (!WriteFile((HANDLE)fop_fd->filesystem_priv, buf, (DWORD)len, &_amount, NULL)) {
*amount = 0;
return 1;