diff --git a/src/internal.c b/src/internal.c index da042586..8d8297c0 100644 --- a/src/internal.c +++ b/src/internal.c @@ -12241,6 +12241,7 @@ int SendKexDhReply(WOLFSSH* ssh) if (sig_ptr) WFREE(sig_ptr, heap, DYNTYPE_BUFFER); #endif + WOLFSSH_UNUSED(heap); return ret; } @@ -16686,6 +16687,7 @@ int wolfSSH_CleanPath(WOLFSSH* ssh, char* in) WMEMCPY(in, path, sz); in[sz] = '\0'; WFREE(path, heap, DYNTYPE_PATH); + WOLFSSH_UNUSED(heap); return (int)sz; } #endif /* WOLFSSH_SFTP || WOLFSSH_SCP */ @@ -16756,6 +16758,9 @@ int wolfSSH_oct2dec(WOLFSSH* ssh, byte* oct, word32 octSz) return ret; } +#ifndef WOLFSSL_MAX_32BIT + #define WOLFSSL_MAX_32BIT INT_MAX +#endif /* addend1 += addend2 */ void AddAssign64(word32* addend1, word32 addend2) diff --git a/src/port.c b/src/port.c index bfb9aec6..0617f9a7 100644 --- a/src/port.c +++ b/src/port.c @@ -126,7 +126,7 @@ int wfopen(WFILE** f, const char* filename, const char* mode) ret = (int)WFSEEK(NULL, &fd, shortOffset[0], SYS_FS_SEEK_SET); if (ret != -1) - ret = (int)WFWRITE(NULL, &fd, buf, sz); + ret = (int)WFWRITE(NULL, buf, 1, sz, &fd); return ret; } @@ -138,7 +138,7 @@ int wfopen(WFILE** f, const char* filename, const char* mode) ret = (int)WFSEEK(NULL, &fd, shortOffset[0], SYS_FS_SEEK_SET); if (ret != -1) - ret = (int)WFREAD(NULL, &fd, buf, sz); + ret = (int)WFREAD(NULL, buf, 1, sz, &fd); return ret; } diff --git a/src/ssh.c b/src/ssh.c index ab0ed7aa..a20ebdb6 100644 --- a/src/ssh.c +++ b/src/ssh.c @@ -1895,7 +1895,11 @@ int wolfSSH_ReadKey_file(const char* name, byte** out, word32* outSz, const byte** outType, word32* outTypeSz, byte* isPrivate, void* heap) { + WFILE* file; +#ifdef MICROCHIP_MPLAB_HARMONY + WFILE f = WBADFILE; +#endif byte* in; word32 inSz; int format; @@ -1909,6 +1913,7 @@ int wolfSSH_ReadKey_file(const char* name, return WS_BAD_ARGUMENT; #ifdef MICROCHIP_MPLAB_HARMONY + file = &f; ret = WFOPEN(NULL, &file, name, WOLFSSH_O_RDONLY); if (ret != 0 || *file == WBADFILE) return WS_BAD_FILE_E; #else diff --git a/src/wolfsftp.c b/src/wolfsftp.c index 832de07d..4ded9dc6 100644 --- a/src/wolfsftp.c +++ b/src/wolfsftp.c @@ -1975,6 +1975,9 @@ int wolfSSH_SFTP_RecvOpen(WOLFSSH* ssh, int reqId, byte* data, word32 maxSz) { WS_SFTP_FILEATRB atr; WFD fd; +#ifdef MICROCHIP_MPLAB_HARMONY + WFILE* f = &fd; +#endif word32 sz, dirSz; char dir[WOLFSSH_MAX_FILENAME]; word32 reason; @@ -2074,7 +2077,12 @@ int wolfSSH_SFTP_RecvOpen(WOLFSSH* ssh, int reqId, byte* data, word32 maxSz) atr.per = 0644; } + #ifdef MICROCHIP_MPLAB_HARMONY + fd = WBADFILE; + WFOPEN(ssh->fs, &f, dir, m); + #else fd = WOPEN(ssh->fs, dir, m, atr.per); + #endif if (fd < 0) { WLOG(WS_LOG_SFTP, "Error opening file %s", dir); res = oer; @@ -3924,7 +3932,12 @@ int wolfSSH_SFTP_RecvClose(WOLFSSH* ssh, int reqId, byte* data, word32 maxSz) if (sz == sizeof(WFD)) { WMEMSET((byte*)&fd, 0, sizeof(WFD)); WMEMCPY((byte*)&fd, data + idx, sz); + +#ifdef MICROCHIP_MPLAB_HARMONY + WFCLOSE(ssh->fs, &fd); +#else ret = WCLOSE(ssh->fs, fd); +#endif #ifdef WOLFSSH_STOREHANDLE if (SFTP_RemoveHandleNode(ssh, data + idx, sz) != WS_SUCCESS) { WLOG(WS_LOG_SFTP, "Unable to remove handle from list"); @@ -4878,26 +4891,28 @@ int SFTP_GetAttributes(void* fs, const char* fileName, WS_SFTP_FILEATRB* atr, byte noFollow, void* heap) { WSTAT_T stats; - WFILE f; + WFILE fd = WBADFILE; + WFILE *f = &fd; int ret; WOLFSSH_UNUSED(heap); WOLFSSH_UNUSED(fs); - ret = WFOPEN(NULL, &f, filename, WOLFSSH_O_RDONLY); - - if (noFollow) { - /* Note, for windows, we treat WSTAT and WLSTAT the same. */ - if (WLSTAT(fs, fileName, &stats) != 0) { - return WS_BAD_FILE_E; - } - } - else { + ret = WFOPEN(NULL, &f, fileName, WOLFSSH_O_RDONLY); + (void)ret; +// if (noFollow) { +// /* Note, for windows, we treat WSTAT and WLSTAT the same. */ +// if (WLSTAT(fs, fileName, &stats) != 0) { +// return WS_BAD_FILE_E; +// } +// } +// else + { if (WSTAT(fs, fileName, &stats) != 0) { return WS_BAD_FILE_E; } } - WFCLOSE(NULL, &f); + WFCLOSE(NULL, f); WMEMSET(atr, 0, sizeof(WS_SFTP_FILEATRB)); @@ -4934,12 +4949,19 @@ int SFTP_GetAttributes_Handle(WOLFSSH* ssh, byte* handle, int handleSz, WS_SFTP_FILEATRB* atr) { WSTAT_T stats; + byte fileName[255]; if (handleSz != sizeof(word32)) { WLOG(WS_LOG_SFTP, "Unexpected handle size SFTP_GetAttributes_Handle()"); } - if (WSTAT(ssh->fs, *(int*)handle, &stats) != 0) { + WMEMSET(fileName, 0, sizeof(fileName)); + if (SYS_FS_FileNameGet(*(SYS_FS_HANDLE*)handle, fileName, sizeof(fileName)) == false) { + printf("unable to get the files name\n"); + return -1; + } + + if (WSTAT(ssh->fs, (const char*)fileName, &stats) != 0) { return WS_BAD_FILE_E; } diff --git a/wolfssh/port.h b/wolfssh/port.h index 6fe9a520..6e0f8f20 100644 --- a/wolfssh/port.h +++ b/wolfssh/port.h @@ -1377,6 +1377,17 @@ extern "C" { #define WRENAME(fs,o,n) SYS_FS_FileDirectoryRenameMove((o),(n)) #define WS_DELIM '/' + static inline char *ff_getcwd(char *r, int rSz) + { + SYS_FS_RESULT ret; + ret = SYS_FS_CurrentWorkingDirectoryGet(r, rSz); + if (ret != SYS_FS_RES_SUCCESS) { + return r; + } + return r; + } + #define WGETCWD(fs,r,rSz) ff_getcwd(r,(rSz)) + #define WOLFSSH_O_RDWR SYS_FS_FILE_OPEN_READ_PLUS #define WOLFSSH_O_RDONLY SYS_FS_FILE_OPEN_READ #define WOLFSSH_O_WRONLY SYS_FS_FILE_OPEN_WRITE