aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--INSTALL.DJGPP2
-rw-r--r--crypto/bio/bss_dgram.c6
-rw-r--r--crypto/bio/bss_file.c30
-rw-r--r--crypto/bio/bss_sock.c6
-rw-r--r--e_os.h4
5 files changed, 40 insertions, 8 deletions
diff --git a/INSTALL.DJGPP b/INSTALL.DJGPP
index e1ec676038..4fd94e44db 100644
--- a/INSTALL.DJGPP
+++ b/INSTALL.DJGPP
@@ -19,7 +19,7 @@
files to download, see the DJGPP "ZIP PICKER" page at
"http://www.delorie.com/djgpp/zip-picker.html". You also need to have
the WATT-32 networking package installed before you try to compile
- OpenSSL. This can be obtained from "http://www.bgnett.no/~giva/".
+ OpenSSL. This can be obtained from "http://www.watt-32.net/".
The Makefile assumes that the WATT-32 code is in the directory
specified by the environment variable WATT_ROOT. If you have watt-32
in directory "watt32" under your main DJGPP directory, specify
diff --git a/crypto/bio/bss_dgram.c b/crypto/bio/bss_dgram.c
index cf2f9f66b5..e6d74e4867 100644
--- a/crypto/bio/bss_dgram.c
+++ b/crypto/bio/bss_dgram.c
@@ -94,12 +94,6 @@
((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_file.c b/crypto/bio/bss_file.c
index a37e89d935..3c056604c8 100644
--- a/crypto/bio/bss_file.c
+++ b/crypto/bio/bss_file.c
@@ -154,6 +154,36 @@ static FILE *file_fopen(const char *filename, const char *mode)
} else if (GetLastError() == ERROR_NO_UNICODE_TRANSLATION) {
file = fopen(filename, mode);
}
+# elif defined(__DJGPP__)
+ {
+ char *newname = NULL;
+
+ if (!HAS_LFN_SUPPORT(filename)) {
+ char *iterator;
+ char lastchar;
+
+ newname = OPENSSL_malloc(strlen(filename) + 1);
+ if (newname == NULL)
+ return NULL;
+
+ for(iterator = newname, lastchar = '\0';
+ *filename; filename++, iterator++) {
+ if (lastchar == '/' && filename[0] == '.'
+ && filename[1] != '.' && filename[1] != '/') {
+ /* Leading dots are not permitted in plain DOS. */
+ *iterator = '_';
+ } else {
+ *iterator = *filename;
+ }
+ lastchar = *filename;
+ }
+ *iterator = '\0';
+ filename = newname;
+ }
+ file = fopen(filename, mode);
+
+ OPENSSL_free(newname);
+ }
# else
file = fopen(filename, mode);
# endif
diff --git a/crypto/bio/bss_sock.c b/crypto/bio/bss_sock.c
index c1f76a24a7..c4e263dabf 100644
--- a/crypto/bio/bss_sock.c
+++ b/crypto/bio/bss_sock.c
@@ -66,7 +66,11 @@
# include <openssl/bio.h>
# ifdef WATT32
-# define sock_write SockWrite /* Watt-32 uses same names */
+/* Watt-32 uses same names */
+# undef sock_write
+# undef sock_read
+# undef sock_puts
+# define sock_write SockWrite
# define sock_read SockRead
# define sock_puts SockPuts
# endif
diff --git a/e_os.h b/e_os.h
index eaa9396b88..0166d7907b 100644
--- a/e_os.h
+++ b/e_os.h
@@ -151,6 +151,7 @@ extern "C" {
# define writesocket(s,b,n) send((s),(b),(n),0)
# elif defined(__DJGPP__)
# define WATT32
+# define WATT32_NO_OLDIES
# define get_last_socket_error() errno
# define clear_socket_error() errno=0
# define closesocket(s) close_s(s)
@@ -185,11 +186,14 @@ extern "C" {
# include <unistd.h>
# include <sys/stat.h>
# include <sys/socket.h>
+# include <sys/un.h>
# include <tcp.h>
# include <netdb.h>
# define _setmode setmode
# define _O_TEXT O_TEXT
# define _O_BINARY O_BINARY
+# define HAS_LFN_SUPPORT(name) (pathconf((name), _PC_NAME_MAX) > 12)
+# undef DEVRANDOM_EGD /* Neither MS-DOS nor FreeDOS provide 'egd' sockets. */
# undef DEVRANDOM
# define DEVRANDOM "/dev/urandom\x24"
# endif /* __DJGPP__ */