[openssl-dev] Fixing some warnings when compiling on non-posix systems.

2017-06-03 Thread Juan Manuel Guerrero

I do not know if someone really cares about this, but I have compiled
openssl-1.0.2-stable-SNAP-20170602 using the DJGPP port of gcc-7.1.0.
The code has been configured using --strict-warnings option.  At least
the following issues have appeared.  Using the DJGPP port of gcc means
that the code is configured and compiled on a non-posix system thus
macros like OPENSSL_SYS_LINUX and FIONBIO are undefined rising warnings
like the fixed ones.  The patch is only intended to show the issue and
how it could be fixed.


Regards,
Juan M. Guerrero



* crypto/bio/bss_dgram.c (long dgram_ctrl):  warning: variable 
'sockopt_val' set but not used [-Wunused-but-set-variable]

* crypto/bio/b_sock.c (BIO_socket_nbio):  warning: variable 'l' set but 
not used [-Wunused-but-set-variable]







diff -aprNU5 openssl-1.0.2-stable-SNAP-20170602.orig/crypto/bio/bss_dgram.c 
openssl-1.0.2-stable-SNAP-20170602/crypto/bio/bss_dgram.c
--- openssl-1.0.2-stable-SNAP-20170602.orig/crypto/bio/bss_dgram.c  
2017-06-03 21:36:52 +
+++ openssl-1.0.2-stable-SNAP-20170602/crypto/bio/bss_dgram.c   2017-06-03 
21:45:22 +
@@ -492,12 +492,12 @@ static long dgram_ctrl(BIO *b, int cmd,
 {
 long ret = 1;
 int *ip;
 struct sockaddr *to = NULL;
 bio_dgram_data *data = NULL;
-int sockopt_val = 0;
 # if defined(OPENSSL_SYS_LINUX) && (defined(IP_MTU_DISCOVER) || 
defined(IP_MTU))
+int sockopt_val = 0;
 socklen_t sockopt_len;  /* assume that system supporting IP_MTU is
  * modern enough to define socklen_t */
 socklen_t addr_len;
 union {
 struct sockaddr sa;
diff -aprNU5 openssl-1.0.2-stable-SNAP-20170602.orig/crypto/bio/b_sock.c 
openssl-1.0.2-stable-SNAP-20170602/crypto/bio/b_sock.c
--- openssl-1.0.2-stable-SNAP-20170602.orig/crypto/bio/b_sock.c 2017-06-01 
20:51:32 +
+++ openssl-1.0.2-stable-SNAP-20170602/crypto/bio/b_sock.c  2017-06-03 
21:42:30 +
@@ -949,14 +949,14 @@ int BIO_set_tcp_ndelay(int s, int on)
 }

 int BIO_socket_nbio(int s, int mode)
 {
 int ret = -1;
+# ifdef FIONBIO
 int l;

 l = mode;
-# ifdef FIONBIO
 ret = BIO_socket_ioctl(s, FIONBIO, );
 # endif
 return (ret == 0);
 }
 #endif
--
openssl-dev mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev


[openssl-dev] [PATCH] Some DJGPP specific fixes and improvements for OpenSSL_1_0_2-stable.

2017-06-03 Thread Juan Manuel Guerrero

I do not know if patches for DJGPP/FreeDOS are still welcome at all for the
OpenSSL 1.0.2 branch but if yes, then I would like to propose some fixes and
improvements.  No one of the proposed changes have impact on any other port.
The patch is based on openssl-1.0.2-stable-SNAP-20170602.  Concerning its
functionality, the patch is identical to the one proposed some months ago for
the openssl-1.1.0 branch and that has found its way into that branch.

The patch will fix/improve the following issues:
1) In Configure:
 For some reason -DTERMIO is set but DJGPP has never offered TERMIO making
 the build fail.  I have changed this to -DTERMIOS as is used to be.
2) In crypto/bio/bss_dgram.c:
 I have removed superfluous macro definitions of sock_write, sock_read and
 sock_puts enclosed by WATT32.
3) In crypto/bio/bss_sock.c:
 Here the existing macro definitions for sock_write, sock_read and sock_puts
 are necessary and must be kept but they must be undefined before they can
 be defined.  This is because newer versions of Watt-32 also redefine them.
4) In crypto/conf/conf_def.c:
 If this port is used on MS-DOS or FreeDOS it becomes necessary to check if
 the underlying file system supports long file names (aka LFN) or not.  If
 it does not then file names with a leading dot like ".rnd" or ".ca_certs"
 are ilicit.  In function def_load_bio, the macros IS_RANDFILE and 
IS_CERT_DIR
 are used to check if the file system offers LFN support so that the file
 names with leading dots are licit.  If the tests fail then the new function
 dosify_filename is called and will substitute invalid characters in the 
file
 name by valid ones before using them.  This check and the call of 
dosify_filename
 is enclosed by OPENSSL_SYS_MSDOS.
5) In e_os.h:
 In the DJGPP section the macros IS_RANDFILE and IS_CERT_DIR are defined.
 Also some auxiliar macros like HAS_LFN_SUPPORT and FILE_EXISTS are defined.
 Because neither MS-DOS nor FreeDOS provide 'egd' sockets, the DEVRANDOM_EGD
 macro is undefined.  This shall inhibit the compilation of code that does
 not work on MS-DOS/FreeDOS.
6) In util/mklink.pl:
 Neither MS-DOS nor FreeDOS provide symlink support so copy files instead.
7) In INSTALL.DJGPP:
 Update URL of WATT-32 library.


I have checked the modified version of OpenSSL_1_0_2-stable on linux and Cygwin.
They are no issues.  This is no surprise because the changes are either guarded
by the __DJGPP__ or OPENSSL_SYS_MSDOS macros.
If more informaton is required please mail me.  Just in case it is required, I
have attached the patch as gzip'ed files too.


Regards,
Juan M. Guerrero





diff -aprNU5 openssl-1.0.2-stable-SNAP-20170602.orig/Configure 
openssl-1.0.2-stable-SNAP-20170602/Configure
--- openssl-1.0.2-stable-SNAP-20170602.orig/Configure   2017-06-01 20:51:32 
+
+++ openssl-1.0.2-stable-SNAP-20170602/Configure2017-06-03 19:41:20 
+
@@ -632,11 +632,11 @@ my %table=(
 "netware-libc-bsdsock", "mwccnlm::BN_LLONG ${x86_gcc_opts}::",
 "netware-libc-gcc", "i586-netware-gcc:-nostdinc -I/ndk/libc/include 
-I/ndk/libc/include/winsock -DL_ENDIAN -DNETWARE_LIBC -DOPENSSL_SYSNAME_NETWARE -DTERMIO -O2 
-Wall:BN_LLONG ${x86_gcc_opts}::",
 "netware-libc-bsdsock-gcc", "i586-netware-gcc:-nostdinc -I/ndk/libc/include 
-DNETWARE_BSDSOCK -DL_ENDIAN -DNETWARE_LIBC -DOPENSSL_SYSNAME_NETWARE -DTERMIO -O2 
-Wall:BN_LLONG ${x86_gcc_opts}::",

 # DJGPP
-"DJGPP", "gcc:-I/dev/env/WATT_ROOT/inc -DTERMIO -DL_ENDIAN -fomit-frame-pointer -O2 
-Wall:::MSDOS:-L/dev/env/WATT_ROOT/lib -lwatt:BN_LLONG ${x86_gcc_des} 
${x86_gcc_opts}:${x86_asm}:a.out:",
+"DJGPP", "gcc:-I/dev/env/WATT_ROOT/inc -DTERMIOS -DL_ENDIAN -fomit-frame-pointer 
-O2 -Wall:::MSDOS:-L/dev/env/WATT_ROOT/lib -lwatt:BN_LLONG ${x86_gcc_des} 
${x86_gcc_opts}:${x86_asm}:a.out:",

 # Ultrix from Bernhard Simon 
 "ultrix-cc","cc:-std1 -O -Olimit 2500 -DL_ENDIAN::(unknown):::",
 "ultrix-gcc","gcc:-O3 -DL_ENDIAN::(unknown):::BN_LLONG",
 # K C is no longer supported; you need gcc on old Ultrix installations
@@ -1532,10 +1532,27 @@ if ($sys_id ne "")
 if ($ranlib eq "")
{
$ranlib = $default_ranlib;
}

+# DJGPP specific CFLAG adjustments
+if ($target =~ /^DJGPP/)
+   {
+   my $gccver=0;
+   if (open(FD,"$cc --version |"))
+   {
+   while() { $gccver=$1 if (/ 
(([1-3])\.|4\.([0-1])([.0-9]*))/); }
+   close(FD);
+   }
+   if ($gccver==0)
+   {
+   # For gcc 4.3.0 and above ensure that always old GNU extern 
inline semantics
+   # are used (aka -fgnu89-inline) even if ISO C99 semantics has 
been specified.
+   $cflags=~s/-fomit-frame-pointer/-fgnu89-inline 
-fomit-frame-pointer/;
+   }
+   }
+
 #my ($bn1)=split(/\s+/,$bn_obj);
 #$bn1 = "" unless defined $bn1;
 #$bn1=$bn_asm unless ($bn1 =~ /\.o$/);