compiling with port changes, needs work for runtime use

pull/790/head
JacobBarthelmeh 2025-03-02 16:42:04 -07:00
parent c4acd86df5
commit 3a4c75f651
5 changed files with 57 additions and 14 deletions

View File

@ -12241,6 +12241,7 @@ int SendKexDhReply(WOLFSSH* ssh)
if (sig_ptr) if (sig_ptr)
WFREE(sig_ptr, heap, DYNTYPE_BUFFER); WFREE(sig_ptr, heap, DYNTYPE_BUFFER);
#endif #endif
WOLFSSH_UNUSED(heap);
return ret; return ret;
} }
@ -16686,6 +16687,7 @@ int wolfSSH_CleanPath(WOLFSSH* ssh, char* in)
WMEMCPY(in, path, sz); WMEMCPY(in, path, sz);
in[sz] = '\0'; in[sz] = '\0';
WFREE(path, heap, DYNTYPE_PATH); WFREE(path, heap, DYNTYPE_PATH);
WOLFSSH_UNUSED(heap);
return (int)sz; return (int)sz;
} }
#endif /* WOLFSSH_SFTP || WOLFSSH_SCP */ #endif /* WOLFSSH_SFTP || WOLFSSH_SCP */
@ -16756,6 +16758,9 @@ int wolfSSH_oct2dec(WOLFSSH* ssh, byte* oct, word32 octSz)
return ret; return ret;
} }
#ifndef WOLFSSL_MAX_32BIT
#define WOLFSSL_MAX_32BIT INT_MAX
#endif
/* addend1 += addend2 */ /* addend1 += addend2 */
void AddAssign64(word32* addend1, word32 addend2) void AddAssign64(word32* addend1, word32 addend2)

View File

@ -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); ret = (int)WFSEEK(NULL, &fd, shortOffset[0], SYS_FS_SEEK_SET);
if (ret != -1) if (ret != -1)
ret = (int)WFWRITE(NULL, &fd, buf, sz); ret = (int)WFWRITE(NULL, buf, 1, sz, &fd);
return ret; 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); ret = (int)WFSEEK(NULL, &fd, shortOffset[0], SYS_FS_SEEK_SET);
if (ret != -1) if (ret != -1)
ret = (int)WFREAD(NULL, &fd, buf, sz); ret = (int)WFREAD(NULL, buf, 1, sz, &fd);
return ret; return ret;
} }

View File

@ -1895,7 +1895,11 @@ int wolfSSH_ReadKey_file(const char* name,
byte** out, word32* outSz, const byte** outType, word32* outTypeSz, byte** out, word32* outSz, const byte** outType, word32* outTypeSz,
byte* isPrivate, void* heap) byte* isPrivate, void* heap)
{ {
WFILE* file; WFILE* file;
#ifdef MICROCHIP_MPLAB_HARMONY
WFILE f = WBADFILE;
#endif
byte* in; byte* in;
word32 inSz; word32 inSz;
int format; int format;
@ -1909,6 +1913,7 @@ int wolfSSH_ReadKey_file(const char* name,
return WS_BAD_ARGUMENT; return WS_BAD_ARGUMENT;
#ifdef MICROCHIP_MPLAB_HARMONY #ifdef MICROCHIP_MPLAB_HARMONY
file = &f;
ret = WFOPEN(NULL, &file, name, WOLFSSH_O_RDONLY); ret = WFOPEN(NULL, &file, name, WOLFSSH_O_RDONLY);
if (ret != 0 || *file == WBADFILE) return WS_BAD_FILE_E; if (ret != 0 || *file == WBADFILE) return WS_BAD_FILE_E;
#else #else

View File

@ -1975,6 +1975,9 @@ int wolfSSH_SFTP_RecvOpen(WOLFSSH* ssh, int reqId, byte* data, word32 maxSz)
{ {
WS_SFTP_FILEATRB atr; WS_SFTP_FILEATRB atr;
WFD fd; WFD fd;
#ifdef MICROCHIP_MPLAB_HARMONY
WFILE* f = &fd;
#endif
word32 sz, dirSz; word32 sz, dirSz;
char dir[WOLFSSH_MAX_FILENAME]; char dir[WOLFSSH_MAX_FILENAME];
word32 reason; word32 reason;
@ -2074,7 +2077,12 @@ int wolfSSH_SFTP_RecvOpen(WOLFSSH* ssh, int reqId, byte* data, word32 maxSz)
atr.per = 0644; atr.per = 0644;
} }
#ifdef MICROCHIP_MPLAB_HARMONY
fd = WBADFILE;
WFOPEN(ssh->fs, &f, dir, m);
#else
fd = WOPEN(ssh->fs, dir, m, atr.per); fd = WOPEN(ssh->fs, dir, m, atr.per);
#endif
if (fd < 0) { if (fd < 0) {
WLOG(WS_LOG_SFTP, "Error opening file %s", dir); WLOG(WS_LOG_SFTP, "Error opening file %s", dir);
res = oer; res = oer;
@ -3924,7 +3932,12 @@ int wolfSSH_SFTP_RecvClose(WOLFSSH* ssh, int reqId, byte* data, word32 maxSz)
if (sz == sizeof(WFD)) { if (sz == sizeof(WFD)) {
WMEMSET((byte*)&fd, 0, sizeof(WFD)); WMEMSET((byte*)&fd, 0, sizeof(WFD));
WMEMCPY((byte*)&fd, data + idx, sz); WMEMCPY((byte*)&fd, data + idx, sz);
#ifdef MICROCHIP_MPLAB_HARMONY
WFCLOSE(ssh->fs, &fd);
#else
ret = WCLOSE(ssh->fs, fd); ret = WCLOSE(ssh->fs, fd);
#endif
#ifdef WOLFSSH_STOREHANDLE #ifdef WOLFSSH_STOREHANDLE
if (SFTP_RemoveHandleNode(ssh, data + idx, sz) != WS_SUCCESS) { if (SFTP_RemoveHandleNode(ssh, data + idx, sz) != WS_SUCCESS) {
WLOG(WS_LOG_SFTP, "Unable to remove handle from list"); 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) byte noFollow, void* heap)
{ {
WSTAT_T stats; WSTAT_T stats;
WFILE f; WFILE fd = WBADFILE;
WFILE *f = &fd;
int ret; int ret;
WOLFSSH_UNUSED(heap); WOLFSSH_UNUSED(heap);
WOLFSSH_UNUSED(fs); WOLFSSH_UNUSED(fs);
ret = WFOPEN(NULL, &f, filename, WOLFSSH_O_RDONLY); ret = WFOPEN(NULL, &f, fileName, WOLFSSH_O_RDONLY);
(void)ret;
if (noFollow) { // if (noFollow) {
/* Note, for windows, we treat WSTAT and WLSTAT the same. */ // /* Note, for windows, we treat WSTAT and WLSTAT the same. */
if (WLSTAT(fs, fileName, &stats) != 0) { // if (WLSTAT(fs, fileName, &stats) != 0) {
return WS_BAD_FILE_E; // return WS_BAD_FILE_E;
} // }
} // }
else { // else
{
if (WSTAT(fs, fileName, &stats) != 0) { if (WSTAT(fs, fileName, &stats) != 0) {
return WS_BAD_FILE_E; return WS_BAD_FILE_E;
} }
} }
WFCLOSE(NULL, &f); WFCLOSE(NULL, f);
WMEMSET(atr, 0, sizeof(WS_SFTP_FILEATRB)); 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) WS_SFTP_FILEATRB* atr)
{ {
WSTAT_T stats; WSTAT_T stats;
byte fileName[255];
if (handleSz != sizeof(word32)) { if (handleSz != sizeof(word32)) {
WLOG(WS_LOG_SFTP, "Unexpected handle size SFTP_GetAttributes_Handle()"); 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; return WS_BAD_FILE_E;
} }

View File

@ -1377,6 +1377,17 @@ extern "C" {
#define WRENAME(fs,o,n) SYS_FS_FileDirectoryRenameMove((o),(n)) #define WRENAME(fs,o,n) SYS_FS_FileDirectoryRenameMove((o),(n))
#define WS_DELIM '/' #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_RDWR SYS_FS_FILE_OPEN_READ_PLUS
#define WOLFSSH_O_RDONLY SYS_FS_FILE_OPEN_READ #define WOLFSSH_O_RDONLY SYS_FS_FILE_OPEN_READ
#define WOLFSSH_O_WRONLY SYS_FS_FILE_OPEN_WRITE #define WOLFSSH_O_WRONLY SYS_FS_FILE_OPEN_WRITE