summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/s_client.c7
-rw-r--r--apps/s_server.c2
-rw-r--r--apps/s_socket.c7
-rw-r--r--crypto/bio/b_sock.c12
-rw-r--r--crypto/bio/bss_dgram.c6
-rw-r--r--crypto/bio/bss_log.c8
-rw-r--r--crypto/bio/bss_sock.c6
-rw-r--r--crypto/des/read_pwd.c2
-rw-r--r--crypto/md4/md4.c2
-rw-r--r--crypto/md5/md5.c2
-rw-r--r--crypto/o_dir.c2
-rw-r--r--crypto/perlasm/x86asm.pl2
-rw-r--r--crypto/ripemd/rmd160.c2
-rw-r--r--crypto/ui/ui_openssl.c2
-rw-r--r--crypto/x86cpuid.pl37
-rw-r--r--demos/bio/sconnect.c5
-rw-r--r--e_os.h29
-rw-r--r--e_os2.h2
-rw-r--r--engines/e_aep.c2
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");
@@ -828,6 +831,10 @@ static char *jpake_secret = NULL;
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;
else if (strcmp(*argv,"-msgfile") == 0)
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 <sys/syslog.h>
#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 <syslog.h>
#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 <openssl/bio.h>
+#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 <go32.h>
+# ...
+# 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 <unistd.h>
+# include <sys/stat.h>
+# include <sys/socket.h>
+# include <tcp.h>
+# include <netdb.h>
+# 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 <string.h>
#include <openssl/e_os2.h>
-#if !defined(OPENSSL_SYS_MSDOS) || defined(__MINGW32__)
+#if !defined(OPENSSL_SYS_MSDOS) || defined(__DJGPP__) || defined(__MINGW32__)
#include <sys/types.h>
#include <unistd.h>
#else