From b57e8253810d67d0815c21886ec4df721983ec6d Mon Sep 17 00:00:00 2001 From: John Safranek Date: Tue, 20 Nov 2018 16:10:47 -0800 Subject: [PATCH] wolfSFTP for Windows 1. Clean up some type size warnings. 2. Fix the wrappers for FileRead() and FileWrite(). The Overlapped struct is a little funky to use. --- src/port.c | 16 ++++++---------- src/wolfsftp.c | 6 +++--- wolfssh/port.h | 3 ++- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/port.c b/src/port.c index d3d1553..0b2342d 100644 --- a/src/port.c +++ b/src/port.c @@ -88,11 +88,9 @@ int wPwrite(WFD fd, unsigned char* buf, unsigned int sz, long ofst) int ret; WMEMSET(&offset, 0, sizeof(OVERLAPPED)); - offset.DUMMYUNIONNAME.DUMMYSTRUCTNAME.Offset = - (DWORD)(ofst & 0xFFFFFFFF); - offset.DUMMYUNIONNAME.DUMMYSTRUCTNAME.OffsetHigh = - (DWORD)((ofst 0xFFFFFFFF00000000) >> 32); - if (WriteFile(XXX, data, sz, &bytesWritten, &offset) != 0) + offset.Offset = (DWORD)(ofst & 0xFFFFFFFF); + offset.OffsetHigh = (DWORD)((ofst & 0xFFFFFFFF00000000) >> 32); + if (WriteFile(fd, buf, sz, &bytesWritten, &offset) != 0) ret = -1; else ret = (int)bytesWritten; @@ -108,11 +106,9 @@ int wPread(WFD fd, unsigned char* buf, unsigned int sz, long ofst) int ret; WMEMSET(&offset, 0, sizeof(OVERLAPPED)); - offset.DUMMYUNIONNAME.DUMMYSTRUCTNAME.Offset = - (DWORD)(ofst & 0xFFFFFFFF); - offset.DUMMYUNIONNAME.DUMMYSTRUCTNAME.OffsetHigh = - (DWORD)((ofst 0xFFFFFFFF00000000) >> 32); - if (ReadFile(XXX, data, sz, &bytesRead, &offset) != 0) + offset.Offset = (DWORD)(ofst & 0xFFFFFFFF); + offset.OffsetHigh = (DWORD)((ofst & 0xFFFFFFFF00000000) >> 32); + if (ReadFile(fd, buf, sz, &bytesRead, &offset) != 0) ret = -1; else ret = (int)bytesRead; diff --git a/src/wolfsftp.c b/src/wolfsftp.c index 984b96b..6807889 100644 --- a/src/wolfsftp.c +++ b/src/wolfsftp.c @@ -22,7 +22,7 @@ #ifdef HAVE_CONFIG_H #include #endif - +#define _CRT_SECURE_NO_WARNINGS #include #ifdef WOLFSSH_SFTP @@ -1588,7 +1588,7 @@ int wolfSSH_SFTP_RecvWrite(WOLFSSH* ssh, int reqId, word32 maxSz) /* get length to be written */ ato32(data + idx, &sz); idx += UINT32_SZ; - ret = (int)WPWRITE(fd, data + idx, sz, ofst); + ret = (int)WPWRITE(fd, data + idx, sz, (long)ofst); WFREE(data, ssh->ctx->heap, DYNTYPE_BUFFER); if (ret < 0) { #if defined(WOLFSSL_NUCLEUS) && defined(DEBUG_WOLFSSH) @@ -1662,7 +1662,7 @@ int wolfSSH_SFTP_RecvRead(WOLFSSH* ssh, int reqId, word32 maxSz) return WS_MEMORY_E; } - ret = (int)WPREAD(fd, data, sz, ofst); + ret = (int)WPREAD(fd, data, sz, (long)ofst); if (ret < 0) { WLOG(WS_LOG_SFTP, "Error reading from file"); WFREE(data, ssh->ctx->heap, DYNTYPE_BUFFER); diff --git a/wolfssh/port.h b/wolfssh/port.h index 765b142..ed733af 100644 --- a/wolfssh/port.h +++ b/wolfssh/port.h @@ -423,6 +423,7 @@ extern "C" { #endif /* NO_WOLFSSH_DIR */ #elif defined(USE_WINDOWS_API) + #include #include #include #include @@ -442,7 +443,7 @@ extern "C" { #define WFD HANDLE int wPwrite(WFD, unsigned char*, unsigned int, long); int wPread(WFD, unsigned char*, unsigned int, long); - #define WPWRITE(fd,b,s,o) wPwrite((fs),(b),(s),(o)) + #define WPWRITE(fd,b,s,o) wPwrite((fd),(b),(s),(o)) #define WPREAD(fd,b,s,o) wPread((fd),(b),(s),(o)) #define WS_DELIM '\\'