From f642ebc1e2dca34bc2b3c46796c131e1f5077bee Mon Sep 17 00:00:00 2001 From: Rich Salz Date: Sat, 9 Aug 2014 08:02:20 -0400 Subject: [PATCH] Undo a90081576c94f9f54de1755188a00ccc1760549a Undo unapproved commit that removed DJGPP and WATT32 --- apps/s_client.c | 7 +++++++ apps/s_server.c | 2 +- apps/s_socket.c | 7 ++++++- crypto/bio/b_sock.c | 12 +++++++++++- crypto/bio/bss_dgram.c | 6 ++++++ crypto/bio/bss_log.c | 8 ++++++-- crypto/bio/bss_sock.c | 6 ++++++ crypto/des/read_pwd.c | 2 +- crypto/md4/md4.c | 2 +- crypto/md5/md5.c | 2 +- crypto/o_dir.c | 2 +- crypto/perlasm/x86asm.pl | 2 +- crypto/ripemd/rmd160.c | 2 +- crypto/ui/ui_openssl.c | 2 +- crypto/x86cpuid.pl | 37 ++++++++++++++++++++++++++++++++++++- demos/bio/sconnect.c | 5 +++++ e_os.h | 29 +++++++++++++++++++++++++++-- e_os2.h | 2 +- engines/e_aep.c | 2 +- 19 files changed, 120 insertions(+), 17 deletions(-) diff --git a/apps/s_client.c b/apps/s_client.c index 1948328927..e1be6a908b 100644 --- a/apps/s_client.c +++ b/apps/s_client.c @@ -308,6 +308,9 @@ static void sc_usage(void) BIO_printf(bio_err," -prexit - print session information even on connection failure\n"); BIO_printf(bio_err," -showcerts - show all certificates in the chain\n"); BIO_printf(bio_err," -debug - extra output\n"); +#ifdef WATT32 + BIO_printf(bio_err," -wdebug - WATT-32 tcp debugging\n"); +#endif BIO_printf(bio_err," -msg - Show protocol messages\n"); BIO_printf(bio_err," -nbio_test - more ssl protocol testing\n"); BIO_printf(bio_err," -state - print the 'ssl' states\n"); @@ -827,6 +830,10 @@ static char *jpake_secret = NULL; c_tlsextdebug=1; else if (strcmp(*argv,"-status") == 0) c_status_req=1; +#endif +#ifdef WATT32 + else if (strcmp(*argv,"-wdebug") == 0) + dbug_init(); #endif else if (strcmp(*argv,"-msg") == 0) c_msg=1; diff --git a/apps/s_server.c b/apps/s_server.c index 4b93fdefa2..1e15281c21 100644 --- a/apps/s_server.c +++ b/apps/s_server.c @@ -2971,7 +2971,7 @@ static int www_body(char *hostname, int s, int stype, unsigned char *context) BIO_printf(bio_s_out,"read R BLOCK\n"); #if defined(OPENSSL_SYS_NETWARE) delay(1000); -#elif !defined(OPENSSL_SYS_MSDOS) && !defined(__DJGPP__) +#elif !defined(OPENSSL_SYS_MSDOS) sleep(1); #endif continue; diff --git a/apps/s_socket.c b/apps/s_socket.c index 093b9c82ad..e83baf4e70 100644 --- a/apps/s_socket.c +++ b/apps/s_socket.c @@ -178,7 +178,12 @@ static void sock_cleanup(void) static int ssl_sock_init(void) { -#if defined(OPENSSL_SYS_WINDOWS) +#ifdef WATT32 + extern int _watt_do_exit; + _watt_do_exit = 0; + if (sock_init()) + return (0); +#elif defined(OPENSSL_SYS_WINDOWS) if (!wsa_init_done) { int err; diff --git a/crypto/bio/b_sock.c b/crypto/bio/b_sock.c index 4544ab209c..a026b3e0b0 100644 --- a/crypto/bio/b_sock.c +++ b/crypto/bio/b_sock.c @@ -494,6 +494,12 @@ int BIO_sock_init(void) } } #endif /* OPENSSL_SYS_WINDOWS */ +#ifdef WATT32 + extern int _watt_do_exit; + _watt_do_exit = 0; /* don't make sock_init() call exit() */ + if (sock_init()) + return (-1); +#endif #if defined(OPENSSL_SYS_NETWARE) && !defined(NETWARE_BSDSOCK) WORD wVerReq; @@ -543,6 +549,9 @@ int BIO_socket_ioctl(int fd, long type, void *arg) { int i; +#ifdef __DJGPP__ + i=ioctlsocket(fd,type,(char *)arg); +#else # if defined(OPENSSL_SYS_VMS) /* 2011-02-18 SMS. * VMS ioctl() can't tolerate a 64-bit "void *arg", but we @@ -565,8 +574,9 @@ int BIO_socket_ioctl(int fd, long type, void *arg) # else /* defined(OPENSSL_SYS_VMS) */ # define ARG arg # endif /* defined(OPENSSL_SYS_VMS) [else] */ - i=ioctlsocket(fd,type,ARG); + i=ioctlsocket(fd,type,ARG); +#endif /* __DJGPP__ */ if (i < 0) SYSerr(SYS_F_IOCTLSOCKET,get_last_socket_error()); return(i); diff --git a/crypto/bio/bss_dgram.c b/crypto/bio/bss_dgram.c index 25d5195bc2..9c0950191b 100644 --- a/crypto/bio/bss_dgram.c +++ b/crypto/bio/bss_dgram.c @@ -95,6 +95,12 @@ ((a)->s6_addr32[2] == htonl(0x0000ffff))) #endif +#ifdef WATT32 +#define sock_write SockWrite /* Watt-32 uses same names */ +#define sock_read SockRead +#define sock_puts SockPuts +#endif + static int dgram_write(BIO *h, const char *buf, int num); static int dgram_read(BIO *h, char *buf, int size); static int dgram_puts(BIO *h, const char *str); diff --git a/crypto/bio/bss_log.c b/crypto/bio/bss_log.c index 7b6eb73152..2227b2b52d 100644 --- a/crypto/bio/bss_log.c +++ b/crypto/bio/bss_log.c @@ -88,7 +88,7 @@ # include #elif defined(OPENSSL_SYS_NETWARE) # define NO_SYSLOG -#elif !defined(MSDOS) && !defined(OPENSSL_SYS_VXWORKS) && !defined(NO_SYSLOG) +#elif (!defined(MSDOS) || defined(WATT32)) && !defined(OPENSSL_SYS_VXWORKS) && !defined(NO_SYSLOG) # include #endif @@ -373,11 +373,15 @@ static void xcloselog(BIO* bp) { } -#else /* Unix */ +#else /* Unix/Watt32 */ static void xopenlog(BIO* bp, char* name, int level) { +#ifdef WATT32 /* djgpp/DOS */ + openlog(name, LOG_PID|LOG_CONS|LOG_NDELAY, level); +#else openlog(name, LOG_PID|LOG_CONS, level); +#endif } static void xsyslog(BIO *bp, int priority, const char *string) diff --git a/crypto/bio/bss_sock.c b/crypto/bio/bss_sock.c index 4e1b3d5fa1..3df31938c1 100644 --- a/crypto/bio/bss_sock.c +++ b/crypto/bio/bss_sock.c @@ -65,6 +65,12 @@ #include +#ifdef WATT32 +#define sock_write SockWrite /* Watt-32 uses same names */ +#define sock_read SockRead +#define sock_puts SockPuts +#endif + static int sock_write(BIO *h, const char *buf, int num); static int sock_read(BIO *h, char *buf, int size); static int sock_puts(BIO *h, const char *str); diff --git a/crypto/des/read_pwd.c b/crypto/des/read_pwd.c index 9042afe173..ce5fa00a37 100644 --- a/crypto/des/read_pwd.c +++ b/crypto/des/read_pwd.c @@ -266,7 +266,7 @@ int des_read_pw(char *buf, char *buff, int size, const char *prompt, long status; unsigned short channel = 0; #else -#if !defined(OPENSSL_SYS_MSDOS) +#if !defined(OPENSSL_SYS_MSDOS) || defined(__DJGPP__) TTY_STRUCT tty_orig,tty_new; #endif #endif diff --git a/crypto/md4/md4.c b/crypto/md4/md4.c index f8a47fb50c..141415ad4d 100644 --- a/crypto/md4/md4.c +++ b/crypto/md4/md4.c @@ -64,7 +64,7 @@ void do_fp(FILE *f); void pt(unsigned char *md); -#if !defined(_OSD_POSIX) +#if !defined(_OSD_POSIX) && !defined(__DJGPP__) int read(int, void *, unsigned int); #endif diff --git a/crypto/md5/md5.c b/crypto/md5/md5.c index d171256520..563733abc5 100644 --- a/crypto/md5/md5.c +++ b/crypto/md5/md5.c @@ -64,7 +64,7 @@ void do_fp(FILE *f); void pt(unsigned char *md); -#if !defined(_OSD_POSIX) +#if !defined(_OSD_POSIX) && !defined(__DJGPP__) int read(int, void *, unsigned int); #endif diff --git a/crypto/o_dir.c b/crypto/o_dir.c index ded369f23c..42891ea459 100644 --- a/crypto/o_dir.c +++ b/crypto/o_dir.c @@ -70,7 +70,7 @@ #include "o_dir.h" #define LPDIR_H -#if defined OPENSSL_SYS_UNIX +#if defined OPENSSL_SYS_UNIX || defined DJGPP #include "LPdir_unix.c" #elif defined OPENSSL_SYS_VMS #include "LPdir_vms.c" diff --git a/crypto/perlasm/x86asm.pl b/crypto/perlasm/x86asm.pl index 6cf80546d2..cae156ae63 100644 --- a/crypto/perlasm/x86asm.pl +++ b/crypto/perlasm/x86asm.pl @@ -277,7 +277,7 @@ sub ::asm_init { print STDERR <<"EOF"; Pick one target type from elf - Linux, FreeBSD, Solaris x86, etc. - a.out - elder OpenBSD, etc. + a.out - DJGPP, elder OpenBSD, etc. coff - GAS/COFF such as Win32 targets win32n - Windows 95/Windows NT NASM format nw-nasm - NetWare NASM format diff --git a/crypto/ripemd/rmd160.c b/crypto/ripemd/rmd160.c index 0fcd99fe16..b0ec574498 100644 --- a/crypto/ripemd/rmd160.c +++ b/crypto/ripemd/rmd160.c @@ -64,7 +64,7 @@ void do_fp(FILE *f); void pt(unsigned char *md); -#if !defined(_OSD_POSIX) +#if !defined(_OSD_POSIX) && !defined(__DJGPP__) int read(int, void *, unsigned int); #endif diff --git a/crypto/ui/ui_openssl.c b/crypto/ui/ui_openssl.c index 1b09b916bb..a38c7581e6 100644 --- a/crypto/ui/ui_openssl.c +++ b/crypto/ui/ui_openssl.c @@ -296,7 +296,7 @@ static long tty_orig[3], tty_new[3]; /* XXX Is there any guarantee that this w static long status; static unsigned short channel = 0; #else -#if !defined(OPENSSL_SYS_MSDOS) +#if !defined(OPENSSL_SYS_MSDOS) || defined(__DJGPP__) static TTY_STRUCT tty_orig,tty_new; #endif #endif diff --git a/crypto/x86cpuid.pl b/crypto/x86cpuid.pl index dca37e7cd2..86772329bc 100644 --- a/crypto/x86cpuid.pl +++ b/crypto/x86cpuid.pl @@ -168,7 +168,7 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } &ret (); &function_end_B("OPENSSL_rdtsc"); -# This works in Ring 0 only [read MS-DOS+privileged DPMI host], +# This works in Ring 0 only [read DJGPP+MS-DOS+privileged DPMI host], # but it's safe to call it on any [supported] 32-bit platform... # Just check for [non-]zero return value... &function_begin_B("OPENSSL_instrument_halt","EXTRN\t_OPENSSL_ia32cap_P:DWORD"); @@ -202,6 +202,41 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } &ret (); &function_end_B("OPENSSL_instrument_halt"); +# Essentially there is only one use for this function. Under DJGPP: +# +# #include +# ... +# i=OPENSSL_far_spin(_dos_ds,0x46c); +# ... +# to obtain the number of spins till closest timer interrupt. + +&function_begin_B("OPENSSL_far_spin"); + &pushf (); + &pop ("eax"); + &bt ("eax",9); + &jnc (&label("nospin")); # interrupts are disabled + + &mov ("eax",&DWP(4,"esp")); + &mov ("ecx",&DWP(8,"esp")); + &data_word (0x90d88e1e); # push %ds, mov %eax,%ds + &xor ("eax","eax"); + &mov ("edx",&DWP(0,"ecx")); + &jmp (&label("spin")); + + &align (16); +&set_label("spin"); + &inc ("eax"); + &cmp ("edx",&DWP(0,"ecx")); + &je (&label("spin")); + + &data_word (0x1f909090); # pop %ds + &ret (); + +&set_label("nospin"); + &xor ("eax","eax"); + &xor ("edx","edx"); + &ret (); +&function_end_B("OPENSSL_far_spin"); &function_begin_B("OPENSSL_wipe_cpu","EXTRN\t_OPENSSL_ia32cap_P:DWORD"); &xor ("eax","eax"); diff --git a/demos/bio/sconnect.c b/demos/bio/sconnect.c index 87b380b258..880344eb78 100644 --- a/demos/bio/sconnect.c +++ b/demos/bio/sconnect.c @@ -32,6 +32,11 @@ char *argv[]; else host=argv[1]; +#ifdef WATT32 + dbug_init(); + sock_init(); +#endif + /* Lets get nice error messages */ SSL_load_error_strings(); diff --git a/e_os.h b/e_os.h index 9a260a4141..0a97895360 100644 --- a/e_os.h +++ b/e_os.h @@ -150,6 +150,13 @@ extern "C" { #define clear_socket_error() WSASetLastError(0) #define readsocket(s,b,n) recv((s),(b),(n),0) #define writesocket(s,b,n) send((s),(b),(n),0) +#elif defined(__DJGPP__) +#define WATT32 +#define get_last_socket_error() errno +#define clear_socket_error() errno=0 +#define closesocket(s) close_s(s) +#define readsocket(s,b,n) read_s(s,b,n) +#define writesocket(s,b,n) send(s,b,n,0) #elif defined(MAC_OS_pre_X) #define get_last_socket_error() errno #define clear_socket_error() errno=0 @@ -220,6 +227,19 @@ extern "C" { #if (defined(WINDOWS) || defined(MSDOS)) +# ifdef __DJGPP__ +# include +# include +# include +# include +# include +# define _setmode setmode +# define _O_TEXT O_TEXT +# define _O_BINARY O_BINARY +# undef DEVRANDOM +# define DEVRANDOM "/dev/urandom\x24" +# endif /* __DJGPP__ */ + # ifndef S_IFDIR # define S_IFDIR _S_IFDIR # endif @@ -228,7 +248,7 @@ extern "C" { # define S_IFMT _S_IFMT # endif -# if !defined(WINNT) +# if !defined(WINNT) && !defined(__DJGPP__) # define NO_SYSLOG # endif # define NO_DIRENT @@ -479,7 +499,7 @@ static unsigned int _strlen31(const char *str) # define SSLeay_Read(a,b,c) (-1) # define SHUTDOWN(fd) close(fd) # define SHUTDOWN2(fd) close(fd) -# else +# elif !defined(__DJGPP__) # if defined(_WIN32_WCE) && _WIN32_WCE<410 # define getservbyname _masked_declaration_getservbyname # endif @@ -506,6 +526,11 @@ static unsigned int _strlen31(const char *str) # define SSLeay_Read(a,b,c) recv((a),(b),(c),0) # define SHUTDOWN(fd) { shutdown((fd),0); closesocket(fd); } # define SHUTDOWN2(fd) { shutdown((fd),2); closesocket(fd); } +# else +# define SSLeay_Write(a,b,c) write_s(a,b,c,0) +# define SSLeay_Read(a,b,c) read_s(a,b,c) +# define SHUTDOWN(fd) close_s(fd) +# define SHUTDOWN2(fd) close_s(fd) # endif # elif defined(MAC_OS_pre_X) diff --git a/e_os2.h b/e_os2.h index d07c4b9360..f4597a2c67 100644 --- a/e_os2.h +++ b/e_os2.h @@ -85,7 +85,7 @@ extern "C" { /* ---------------------- Microsoft operating systems ---------------------- */ /* Note that MSDOS actually denotes 32-bit environments running on top of - MS-DOS. */ + MS-DOS, such as DJGPP one. */ #if defined(OPENSSL_SYSNAME_MSDOS) # undef OPENSSL_SYS_UNIX # define OPENSSL_SYS_MSDOS diff --git a/engines/e_aep.c b/engines/e_aep.c index d27e562b0c..a9372268cd 100644 --- a/engines/e_aep.c +++ b/engines/e_aep.c @@ -57,7 +57,7 @@ #include #include -#if !defined(OPENSSL_SYS_MSDOS) || defined(__MINGW32__) +#if !defined(OPENSSL_SYS_MSDOS) || defined(__DJGPP__) || defined(__MINGW32__) #include #include #else -- 2.25.1