diff --git a/src/internal.c b/src/internal.c index 7c1791155..5d708f7b3 100644 --- a/src/internal.c +++ b/src/internal.c @@ -54,7 +54,11 @@ #include #else #define WOLFSSH_MISC_INCLUDED - #include "src/misc.c" + #if defined(WOLFSSL_NUCLEUS) + #include "src/wolfssh_misc.c" + #else + #include "src/misc.c" + #endif #endif @@ -14100,6 +14104,8 @@ int wolfSSH_CleanPath(WOLFSSH* ssh, char* in) if (path[sz - 1] == ':') { path[sz] = WS_DELIM; path[sz + 1] = '\0'; + in[sz] = WS_DELIM; + in[sz + 1] = '\0'; } /* clean up any multiple drive listed i.e. A:/A: */ diff --git a/src/ssh.c b/src/ssh.c index fcee2726b..4597f8a03 100644 --- a/src/ssh.c +++ b/src/ssh.c @@ -39,7 +39,11 @@ #include #else #define WOLFSSH_MISC_INCLUDED - #include "src/misc.c" + #if defined(WOLFSSL_NUCLEUS) + #include "src/wolfssh_misc.c" + #else + #include "src/misc.c" + #endif #endif #ifdef HAVE_FIPS diff --git a/src/wolfsftp.c b/src/wolfsftp.c index e32d09d04..0d62ade4a 100644 --- a/src/wolfsftp.c +++ b/src/wolfsftp.c @@ -34,7 +34,11 @@ #include #else #define WOLFSSH_MISC_INCLUDED - #include "src/misc.c" + #if defined(WOLFSSL_NUCLEUS) + #include "src/wolfssh_misc.c" + #else + #include "src/misc.c" + #endif #endif /* for XGMTIME if defined */ @@ -2731,6 +2735,15 @@ static int wolfSSH_SFTPNAME_readdir(WOLFSSH* ssh, WDIR* dir, WS_SFTPNAME* out, ret = WS_NEXT_ERROR; } + if (special) { + sz = WSTRLEN(out->fName); + + if ((out->fName[sz - 1] == '/') || (out->fName[sz - 1] == WS_DELIM)) { + out->fName[sz - 1] = '\0'; + out->fSz--; + } + } + /* Use attributes and fName to create long name */ if (SFTP_CreateLongName(out) != WS_SUCCESS) { WLOG(WS_LOG_DEBUG, "Error creating long name for %s", out->fName); @@ -4271,12 +4284,22 @@ int SFTP_RemoveHandleNode(WOLFSSH* ssh, byte* handle, word32 handleSz) #ifndef NO_WOLFSSH_MKTIME #define WS_GETDAY(d) ((d) & 0x001f) -#define WS_GETMON(d) (((d) >> 5) & 0x000f) +#define _GETMON(d) (((d) >> 5) & 0x000f) /* number of years since 1900. year + 1980 - 1900 */ #define WS_GETYEAR(d) ((((d) >> 9) & 0x007f) + 80) -#define WS_GETHOUR(t) (((t) >> 11) & 0x001f) +#define _GETHOUR(t) (((t) >> 11) & 0x001f) #define WS_GETMIN(t) (((t) >> 5 ) & 0x003f) #define WS_GETSEC(t) (((t) << 1 ) & 0x003f) +#ifdef WOLFSSL_NUCLEUS + /* mktime() expects month from 0 to 11. Nucleus months + * are saved as 1 to 12. Hence 1 is being deducted to + * make it compatible with Unix time stamp. */ + #define WS_GETMON(d) (_GETMON(d) - 5) + #define WS_GETHOUR(t) (_GETHOUR(t) - 1) +#else + #define WS_GETMON(d) _GETMON(d) + #define WS_GETHOUR(t) _GETHOUR(t) +#endif /* convert nucleus date and time shorts to word32 * returns results in Unix time stamp */ @@ -7159,7 +7182,6 @@ int wolfSSH_SFTP_SendWritePacket(WOLFSSH* ssh, byte* handle, word32 handleSz, ret = wolfSSH_worker(ssh, NULL); continue; /* skip past rest and send more */ } - if (state->sentSz <= 0) { ssh->error = state->sentSz; ret = WS_FATAL_ERROR; @@ -8901,7 +8923,6 @@ int wolfSSH_SFTP_Put(WOLFSSH* ssh, char* from, char* to, byte resume, } } - /* called when wolfSSH_free() is called * return WS_SUCCESS on success */ int wolfSSH_SFTP_free(WOLFSSH* ssh) @@ -8950,7 +8971,6 @@ int wolfSSH_SFTP_free(WOLFSSH* ssh) return WS_SUCCESS; } - #ifdef WOLFSSH_SHOW_SIZES void wolfSSH_SFTP_ShowSizes(void) diff --git a/wolfssh/port.h b/wolfssh/port.h index 189109c63..3a4820efd 100644 --- a/wolfssh/port.h +++ b/wolfssh/port.h @@ -33,6 +33,10 @@ #include #include +#ifdef WOLFSSL_NUCLEUS +#include "os/networking/utils/util_tp.h" +#endif + #ifdef __cplusplus extern "C" { #endif @@ -105,14 +109,16 @@ extern "C" { #define WFILE int WOLFSSH_API int wfopen(WFILE**, const char*, const char*); - #define WFOPEN(fs, f,fn,m) wfopen((f),(fn),(m)) + #define WFOPEN(fs,f,fn,m) wfopen((f),(fn),(m)) #define WFCLOSE(fs,f) NU_Close(*(f)) - #define WFWRITE(fs,b,x,s,f) ((s) != 0)? NU_Write(*(f),(const CHAR*)(b),(s)): 0 + #define WFWRITE(fs,b,x,s,f) \ + (((s) != 0) ? NU_Write(*(f),(const CHAR*)(b),(s)) : 0) #define WFREAD(fs,b,x,s,f) NU_Read(*(f),(CHAR*)(b),(s)) #define WFSEEK(fs,s,o,w) NU_Seek(*(s),(o),(w)) #define WFTELL(fs,s) NU_Seek(*(s), 0, PSEEK_CUR) #define WREWIND(fs,s) NU_Seek(*(s), 0, PSEEK_SET) #define WSEEK_END PSEEK_END + #define WBADFILE NULL #define WS_DELIM '\\' #define WOLFSSH_O_RDWR PO_RDWR @@ -561,6 +567,9 @@ extern "C" { #elif defined(WOLFSSH_ZEPHYR) #define WTIME time #define WLOCALTIME(c,r) (gmtime_r((c),(r))!=NULL) +#elif defined(WOLFSSL_NUCLEUS) + #define WTIME time + #define WLOCALTIME(c,r) (localtime_s((c),(r))!=NULL) #else #define WTIME time #define WLOCALTIME(c,r) (localtime_r((c),(r))!=NULL) @@ -756,7 +765,7 @@ extern "C" { if (NU_Get_Attributes(&atrib, dir) == NU_SUCCESS) { if (atrib & ADIRENT) { if (tmp[idx-1] != WS_DELIM) { - if (idx + 2 > sizeof(tmp)) { + if (idx + 2 > (int)sizeof(tmp)) { /* not enough space */ return -1; } @@ -768,7 +777,7 @@ extern "C" { } if (tmp[idx - 1] == WS_DELIM) { - if (idx + 1 > sizeof(tmp)) { + if (idx + 1 > (int)sizeof(tmp)) { /* not enough space */ return -1; } @@ -1316,7 +1325,6 @@ extern "C" { #include /* used for rmdir */ #include /* used for mkdir, stat, and lstat */ #include /* used for remove and rename */ - #include /* used for opening directory and reading */ #define WSTAT_T struct stat #define WRMDIR(fs,d) rmdir((d))