diff --git a/Configure b/Configure index 5c8da1856c..a65112d8e3 100755 --- a/Configure +++ b/Configure @@ -533,6 +533,9 @@ my %table=( ##### OS/2 EMX "OS2-EMX", "gcc::::::::", +##### VxWorks for various targets +"vxworks-ppc405","ccppc:-g -msoft-float -mlongcall -DCPU=PPC405 -I\$(WIND_BASE)/target/h:::VXWORKS:-r:::::", + ); my @WinTargets=qw(VC-NT VC-WIN32 VC-WIN16 VC-W31-16 VC-W31-32 VC-MSDOS BC-32 diff --git a/apps/ca.c b/apps/ca.c index 04246bbe47..3417e328d2 100644 --- a/apps/ca.c +++ b/apps/ca.c @@ -90,7 +90,7 @@ # else # include # endif -# else +# elif !defined(OPENSSL_SYS_VXWORKS) # include # endif #endif diff --git a/apps/s_time.c b/apps/s_time.c index 9ce114dcb6..2fb853d071 100644 --- a/apps/s_time.c +++ b/apps/s_time.c @@ -85,7 +85,7 @@ #include OPENSSL_UNISTD #endif -#if !defined(OPENSSL_SYS_MSDOS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC)) && !defined(OPENSSL_SYS_MACOSX) +#if !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_VXWORKS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC)) && !defined(OPENSSL_SYS_MACOSX) #define TIMES #endif @@ -105,7 +105,7 @@ #undef TIMES #endif -#ifndef TIMES +#if !defined(TIMES) && !defined(OPENSSL_SYS_VXWORKS) #include #endif @@ -150,6 +150,8 @@ #undef BUFSIZZ #define BUFSIZZ 1024*10 +#undef min +#undef max #define min(a,b) (((a) < (b)) ? (a) : (b)) #define max(a,b) (((a) > (b)) ? (a) : (b)) @@ -379,6 +381,22 @@ static double tm_Time_F(int s) ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ; return((ret == 0.0)?1e-6:ret); } +#elif defined(OPENSSL_SYS_VXWORKS) + { + static unsigned long tick_start, tick_end; + + if( s == START ) + { + tick_start = tickGet(); + return 0; + } + else + { + tick_end = tickGet(); + ret = (double)(tick_end - tick_start) / (double)sysClkRateGet(); + return((ret == 0.0)?1e-6:ret); + } + } #else /* !times() */ static struct timeb tstart,tend; long i; diff --git a/apps/speed.c b/apps/speed.c index 1d62c8b87a..5e53668025 100644 --- a/apps/speed.c +++ b/apps/speed.c @@ -89,10 +89,10 @@ #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(OPENSSL_SYS_MACOSX) # define USE_TOD -#elif !defined(OPENSSL_SYS_MSDOS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC)) +#elif !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_VXWORKS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC)) # define TIMES #endif -#if !defined(_UNICOS) && !defined(__OpenBSD__) && !defined(sgi) && !defined(__FreeBSD__) && !(defined(__bsdi) || defined(__bsdi__)) && !defined(_AIX) && !defined(OPENSSL_SYS_MPE) && !defined(__NetBSD__) /* FIXME */ +#if !defined(_UNICOS) && !defined(__OpenBSD__) && !defined(sgi) && !defined(__FreeBSD__) && !(defined(__bsdi) || defined(__bsdi__)) && !defined(_AIX) && !defined(OPENSSL_SYS_MPE) && !defined(__NetBSD__) && !defined(OPENSSL_SYS_VXWORKS) /* FIXME */ # define TIMEB #endif @@ -120,7 +120,7 @@ #include #endif -#if !defined(TIMES) && !defined(TIMEB) && !defined(USE_TOD) +#if !defined(TIMES) && !defined(TIMEB) && !defined(USE_TOD) && !defined(OPENSSL_SYS_VXWORKS) #error "It seems neither struct tms nor struct timeb is supported in this platform!" #endif @@ -326,7 +326,23 @@ static double Time_F(int s) # if defined(TIMES) && defined(TIMEB) else # endif -# ifdef TIMEB +# ifdef OPENSSL_SYS_VXWORKS + { + static unsigned long tick_start, tick_end; + + if( s == START ) + { + tick_start = tickGet(); + return 0; + } + else + { + tick_end = tickGet(); + ret = (double)(tick_end - tick_start) / (double)sysClkRateGet(); + return((ret < 0.001)?0.001:ret); + } + } +# elif defined(TIMEB) { static struct timeb tstart,tend; long i; diff --git a/crypto/bio/bss_bio.c b/crypto/bio/bss_bio.c index f666c47f4e..1eeed9e7fe 100644 --- a/crypto/bio/bss_bio.c +++ b/crypto/bio/bss_bio.c @@ -23,6 +23,11 @@ #include #include "e_os.h" + +/* VxWorks defines SSIZE_MAX with an empty value causing compile errors */ +#if defined(OPENSSL_SYS_VSWORKS) +# undef SSIZE_MAX +#endif #ifndef SSIZE_MAX # define SSIZE_MAX INT_MAX #endif @@ -255,7 +260,7 @@ static ssize_t bio_nread(BIO *bio, char **buf, size_t num_) ssize_t num, available; if (num_ > SSIZE_MAX) - num = SSIZE_MAX; + num = SSIZE_MAX; else num = (ssize_t)num_; diff --git a/crypto/bio/bss_log.c b/crypto/bio/bss_log.c index e5954cd7f5..a39d95297c 100644 --- a/crypto/bio/bss_log.c +++ b/crypto/bio/bss_log.c @@ -77,7 +77,7 @@ # include #elif defined(__ultrix) # include -#elif !defined(MSDOS) && !defined(NO_SYSLOG) /* Unix */ +#elif !defined(MSDOS) && !defined(OPENSSL_SYS_VXWORKS) && !defined(NO_SYSLOG) /* Unix */ # include #endif diff --git a/crypto/des/read_pwd.c b/crypto/des/read_pwd.c index db021dfc37..db623706a7 100644 --- a/crypto/des/read_pwd.c +++ b/crypto/des/read_pwd.c @@ -133,6 +133,12 @@ #define SGTTY #endif +#if defined(OPENSSL_SYS_VSWORKS) +#undef TERMIOS +#undef TERMIO +#undef SGTTY +#endif + #ifdef TERMIOS #include #define TTY_STRUCT struct termios @@ -268,7 +274,7 @@ int des_read_pw(char *buf, char *buff, int size, const char *prompt, #ifdef OPENSSL_SYS_MSDOS if ((tty=fopen("con","r")) == NULL) tty=stdin; -#elif defined(MAC_OS_pre_X) +#elif defined(MAC_OS_pre_X) || defined(OPENSSL_SYS_VSWORKS) tty=stdin; #else #ifndef OPENSSL_SYS_MPE diff --git a/crypto/rand/rand_egd.c b/crypto/rand/rand_egd.c index dc54e5fa12..dd490c8254 100644 --- a/crypto/rand/rand_egd.c +++ b/crypto/rand/rand_egd.c @@ -114,7 +114,11 @@ int RAND_egd_bytes(const char *path,int bytes) #include #include #ifndef NO_SYS_UN_H -#include +# ifdef OPENSSL_SYS_VSWORKS +# include +# else +# include +# endif #else struct sockaddr_un { short sun_family; /* AF_UNIX */ diff --git a/crypto/rsa/rsa.h b/crypto/rsa/rsa.h index 47d12c9e8d..030a6c88e5 100644 --- a/crypto/rsa/rsa.h +++ b/crypto/rsa/rsa.h @@ -109,10 +109,10 @@ typedef struct rsa_meth_st * option is set in 'flags'. */ int (*rsa_sign)(int type, - const unsigned char *m, unsigned int m_len, + const unsigned char *m, unsigned int m_length, unsigned char *sigret, unsigned int *siglen, const RSA *rsa); int (*rsa_verify)(int dtype, - const unsigned char *m, unsigned int m_len, + const unsigned char *m, unsigned int m_length, unsigned char *sigbuf, unsigned int siglen, const RSA *rsa); } RSA_METHOD; @@ -231,18 +231,18 @@ RSA *d2i_Netscape_RSA(RSA **a, const unsigned char **pp, long length, int (*cb)( /* The following 2 functions sign and verify a X509_SIG ASN1 object * inside PKCS#1 padded RSA encryption */ -int RSA_sign(int type, const unsigned char *m, unsigned int m_len, +int RSA_sign(int type, const unsigned char *m, unsigned int m_length, unsigned char *sigret, unsigned int *siglen, RSA *rsa); -int RSA_verify(int type, const unsigned char *m, unsigned int m_len, +int RSA_verify(int type, const unsigned char *m, unsigned int m_length, unsigned char *sigbuf, unsigned int siglen, RSA *rsa); /* The following 2 function sign and verify a ASN1_OCTET_STRING * object inside PKCS#1 padded RSA encryption */ int RSA_sign_ASN1_OCTET_STRING(int type, - const unsigned char *m, unsigned int m_len, + const unsigned char *m, unsigned int m_length, unsigned char *sigret, unsigned int *siglen, RSA *rsa); int RSA_verify_ASN1_OCTET_STRING(int type, - const unsigned char *m, unsigned int m_len, + const unsigned char *m, unsigned int m_length, unsigned char *sigbuf, unsigned int siglen, RSA *rsa); int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); diff --git a/crypto/tmdiff.c b/crypto/tmdiff.c index eccba43c0b..aea47598ad 100644 --- a/crypto/tmdiff.c +++ b/crypto/tmdiff.c @@ -65,7 +65,7 @@ #undef TIMES #endif -#if !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN32) && !defined(OPENSSL_SYS_VMS) || defined(__DECC) && !defined(OPENSSL_SYS_MACOSX) +#if !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN32) && !defined(OPENSSL_SYS_VMS) || defined(__DECC) && !defined(OPENSSL_SYS_MACOSX) && !defined(OPENSSL_SYS_VXWORKS) # define TIMES #endif @@ -91,7 +91,7 @@ #include #endif -#ifndef TIMES +#if !defined(TIMES) && !defined(OPENSSL_SYS_VXWORKS) #include #endif @@ -121,7 +121,11 @@ typedef struct ms_tm HANDLE thread_id; FILETIME ms_win32; # else +# ifdef OPENSSL_SYS_VSWORKS + unsigned long ticks; +# else struct timeb ms_timeb; +# endif # endif #endif } MS_TM; @@ -159,7 +163,11 @@ void ms_time_get(char *a) # ifdef OPENSSL_SYS_WIN32 GetThreadTimes(tm->thread_id,&tmpa,&tmpb,&tmpc,&(tm->ms_win32)); # else +# ifdef OPENSSL_SYS_VSWORKS + tm->ticks = tickGet(); +# else ftime(&tm->ms_timeb); +# endif # endif #endif } @@ -189,10 +197,14 @@ double ms_time_diff(char *ap, char *bp) ret=((double)(lb-la))/1e7; } # else +# ifdef OPENSSL_SYS_VSWORKS + ret = (double)(b->ticks - a->ticks) / (double)sysClkRateGet(); +# else ret= (double)(b->ms_timeb.time-a->ms_timeb.time)+ (((double)b->ms_timeb.millitm)- ((double)a->ms_timeb.millitm))/1000.0; # endif +# endif #endif return((ret < 0.0000001)?0.0000001:ret); } @@ -210,6 +222,9 @@ int ms_time_cmp(char *ap, char *bp) d =(b->ms_win32.dwHighDateTime&0x000fffff)*10+b->ms_win32.dwLowDateTime/1e7; d-=(a->ms_win32.dwHighDateTime&0x000fffff)*10+a->ms_win32.dwLowDateTime/1e7; # else +# ifdef OPENSSL_SYS_VSWORKS + d = (b->ticks - a->ticks); +# else d= (double)(b->ms_timeb.time-a->ms_timeb.time)+ (((double)b->ms_timeb.millitm)-(double)a->ms_timeb.millitm)/1000.0; # endif diff --git a/crypto/ui/ui_openssl.c b/crypto/ui/ui_openssl.c index 95e0b6e921..3aa03f74aa 100644 --- a/crypto/ui/ui_openssl.c +++ b/crypto/ui/ui_openssl.c @@ -191,6 +191,12 @@ # define SGTTY #endif +#if defined(OPENSSL_SYS_VSWORKS) +#undef TERMIOS +#undef TERMIO +#undef SGTTY +#endif + #ifdef TERMIOS # include # define TTY_STRUCT struct termios @@ -444,7 +450,7 @@ static int open_console(UI *ui) CRYPTO_w_lock(CRYPTO_LOCK_UI); is_a_tty = 1; -#if defined(OPENSSL_SYS_MACINTOSH_CLASSIC) +#if defined(OPENSSL_SYS_MACINTOSH_CLASSIC) || defined(OPENSSL_SYS_VSWORKS) tty_in=stdin; tty_out=stderr; #else diff --git a/e_os.h b/e_os.h index 19f085682c..0bb2bfa693 100644 --- a/e_os.h +++ b/e_os.h @@ -88,6 +88,12 @@ extern "C" { #define DEVRANDOM_EGD "/var/run/egd-pool","/dev/egd-pool","/etc/egd-pool","/etc/entropy" #endif +#if defined(OPENSSL_SYS_VXWORKS) +# define NO_SYS_PARAM_H +# define NO_CHMOD +# define NO_SYSLOG +#endif + #if defined(OPENSSL_SYS_MACINTOSH_CLASSIC) # if macintosh==1 # ifndef MAC_OS_GUSI_SOURCE @@ -353,7 +359,9 @@ extern HINSTANCE _hInstance; # ifndef NO_SYS_PARAM_H # include # endif -# ifndef OPENSSL_SYS_MPE +# ifdef OPENSSL_SYS_VXWORKS +# include +# elif !defined(OPENSSL_SYS_MPE) # include /* Needed under linux for FD_XXX */ # endif