From 2c25ebd1e29a837b1c0e5fea5f464d4b6ddbab5a Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Tue, 10 May 2016 14:41:19 +0200 Subject: [PATCH] DJGPP adjustments * Configure: Replaced -DTERMIO by -DTERMIOS in CFLAGS. * crypto/bio/bss_dgram.c [WATT32]: Remove obsolete redefinition of function names: sock_write, sock_read and sock_puts. * crypto/bio/bss_sock.c [WATT32]: For Watt-32 2.2.11 sock_write, sock_read and sock_puts are redefined to their private names so their names must be undefined first before they can be redefined again. * crypto/bio/bss_file.c (file_fopen) [__DJGPP__]: Make a copy of the passed file name and replace the leading dots in the dirname part and the basname part of the file name, unless LFN is supported. * e_os.h [__DJGPP__]: Undefine macro DEVRANDOM_EGD. Neither MS-DOS nor FreeDOS provide 'egd' sockets. New macro HAS_LFN_SUPPORT checks if underlying file system supports long file names or not. Include sys/un.h. Define WATT32_NO_OLDIES. * INSTALL.DJGPP: Update URL of WATT-32 library. Submitted by Juan Manuel Guerrero RT#4217 Reviewed-by: Andy Polyakov --- INSTALL.DJGPP | 2 +- crypto/bio/bss_dgram.c | 6 ------ crypto/bio/bss_file.c | 30 ++++++++++++++++++++++++++++++ crypto/bio/bss_sock.c | 6 +++++- e_os.h | 4 ++++ 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 # 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 # include # include +# include # include # include # 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__ */ -- 2.25.1