Have all tests use EXIT() to exit rather than exit(), since the latter doesn't
always give the expected result on some platforms.
diff --git a/crypto/bf/bftest.c b/crypto/bf/bftest.c
index c85bc32..24d526b 100644
--- a/crypto/bf/bftest.c
+++ b/crypto/bf/bftest.c
@@ -63,6 +63,8 @@
 #include <string.h>
 #include <stdlib.h>
 
+#include "../e_os.h"
+
 #ifdef OPENSSL_NO_BF
 int main(int argc, char *argv[])
 {
@@ -275,7 +277,7 @@
 	else
 		ret=test();
 
-	exit(ret);
+	EXIT(ret);
 	return(0);
 	}
 
diff --git a/crypto/bn/bntest.c b/crypto/bn/bntest.c
index 689683a..d87ccf9 100644
--- a/crypto/bn/bntest.c
+++ b/crypto/bn/bntest.c
@@ -163,10 +163,10 @@
 
 
 	ctx=BN_CTX_new();
-	if (ctx == NULL) exit(1);
+	if (ctx == NULL) EXIT(1);
 
 	out=BIO_new(BIO_s_file());
-	if (out == NULL) exit(1);
+	if (out == NULL) EXIT(1);
 	if (outfile == NULL)
 		{
 		BIO_set_fp(out,stdout,BIO_NOCLOSE);
@@ -176,7 +176,7 @@
 		if (!BIO_write_filename(out,outfile))
 			{
 			perror(outfile);
-			exit(1);
+			EXIT(1);
 			}
 		}
 
@@ -296,14 +296,14 @@
 	BIO_free(out);
 
 /**/
-	exit(0);
+	EXIT(0);
 err:
 	BIO_puts(out,"1\n"); /* make sure the Perl script fed by bc notices
 	                      * the failure, see test_bn in test/Makefile.ssl*/
 	BIO_flush(out);
 	ERR_load_crypto_strings();
 	ERR_print_errors_fp(stderr);
-	exit(1);
+	EXIT(1);
 	return(1);
 	}
 
@@ -546,7 +546,7 @@
 	BN_CTX *ctx;
 
 	ctx = BN_CTX_new();
-	if (ctx == NULL) exit(1);
+	if (ctx == NULL) EXIT(1);
 	
 	BN_init(&a);
 	BN_init(&b);
@@ -784,7 +784,7 @@
 			while ((l=ERR_get_error()))
 				fprintf(stderr,"ERROR:%s\n",
 					ERR_error_string(l,NULL));
-			exit(1);
+			EXIT(1);
 			}
 		if (bp != NULL)
 			{
diff --git a/crypto/bn/exptest.c b/crypto/bn/exptest.c
index 5ca570d..621e6a9 100644
--- a/crypto/bn/exptest.c
+++ b/crypto/bn/exptest.c
@@ -59,6 +59,9 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+
+#include "../e_os.h"
+
 #include <openssl/bio.h>
 #include <openssl/bn.h>
 #include <openssl/rand.h>
@@ -86,7 +89,7 @@
 	ERR_load_BN_strings();
 
 	ctx=BN_CTX_new();
-	if (ctx == NULL) exit(1);
+	if (ctx == NULL) EXIT(1);
 	r_mont=BN_new();
 	r_recp=BN_new();
 	r_simple=BN_new();
@@ -99,7 +102,7 @@
 
 	out=BIO_new(BIO_s_file());
 
-	if (out == NULL) exit(1);
+	if (out == NULL) EXIT(1);
 	BIO_set_fp(out,stdout,BIO_NOCLOSE);
 
 	for (i=0; i<200; i++)
@@ -124,7 +127,7 @@
 			{
 			printf("BN_mod_exp_mont() problems\n");
 			ERR_print_errors(out);
-			exit(1);
+			EXIT(1);
 			}
 
 		ret=BN_mod_exp_recp(r_recp,a,b,m,ctx);
@@ -132,7 +135,7 @@
 			{
 			printf("BN_mod_exp_recp() problems\n");
 			ERR_print_errors(out);
-			exit(1);
+			EXIT(1);
 			}
 
 		ret=BN_mod_exp_simple(r_simple,a,b,m,ctx);
@@ -140,7 +143,7 @@
 			{
 			printf("BN_mod_exp_simple() problems\n");
 			ERR_print_errors(out);
-			exit(1);
+			EXIT(1);
 			}
 
 		if (BN_cmp(r_simple, r_mont) == 0
@@ -163,7 +166,7 @@
 			printf("\nrecp     =");	BN_print(out,r_recp);
 			printf("\nmont     ="); BN_print(out,r_mont);
 			printf("\n");
-			exit(1);
+			EXIT(1);
 			}
 		}
 	BN_free(r_mont);
@@ -177,11 +180,11 @@
 	CRYPTO_mem_leaks(out);
 	BIO_free(out);
 	printf(" done\n");
-	exit(0);
+	EXIT(0);
 err:
 	ERR_load_crypto_strings();
 	ERR_print_errors(out);
-	exit(1);
+	EXIT(1);
 	return(1);
 	}
 
diff --git a/crypto/cast/casttest.c b/crypto/cast/casttest.c
index 099e790..83e5a16 100644
--- a/crypto/cast/casttest.c
+++ b/crypto/cast/casttest.c
@@ -60,6 +60,8 @@
 #include <string.h>
 #include <stdlib.h>
 
+#include "../e_os.h"
+
 #ifdef OPENSSL_NO_CAST
 int main(int argc, char *argv[])
 {
@@ -224,7 +226,7 @@
       }
 #endif
 
-    exit(err);
+    EXIT(err);
     return(err);
     }
 #endif
diff --git a/crypto/dh/dhtest.c b/crypto/dh/dhtest.c
index 34894ce..2723774 100644
--- a/crypto/dh/dhtest.c
+++ b/crypto/dh/dhtest.c
@@ -59,6 +59,9 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+
+#include "../e_os.h"
+
 #ifdef OPENSSL_SYS_WINDOWS
 #include "../bio/bss_file.c" 
 #endif
@@ -111,7 +114,7 @@
 	RAND_seed(rnd_seed, sizeof rnd_seed);
 
 	out=BIO_new(BIO_s_file());
-	if (out == NULL) exit(1);
+	if (out == NULL) EXIT(1);
 	BIO_set_fp(out,stdout,BIO_NOCLOSE);
 
 	a=DH_generate_parameters(64,DH_GENERATOR_5,cb,out);
@@ -195,7 +198,7 @@
 	CRYPTO_cleanup_all_ex_data();
 	ERR_remove_state(0);
 	CRYPTO_mem_leaks_fp(stderr);
-	exit(ret);
+	EXIT(ret);
 	return(ret);
 	}
 
diff --git a/crypto/dsa/dsatest.c b/crypto/dsa/dsatest.c
index 12da64f..4c411f2 100644
--- a/crypto/dsa/dsatest.c
+++ b/crypto/dsa/dsatest.c
@@ -61,6 +61,9 @@
 #include <string.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+
+#include "../e_os.h"
+
 #include <openssl/crypto.h>
 #include <openssl/rand.h>
 #include <openssl/bio.h>
@@ -212,7 +215,7 @@
 		BIO_free(bio_err);
 		bio_err = NULL;
 		}
-	exit(!ret);
+	EXIT(!ret);
 	return(0);
 	}
 
@@ -231,7 +234,7 @@
 	if (!ok && (p == 0) && (num > 1))
 		{
 		BIO_printf((BIO *)arg,"error in dsatest\n");
-		exit(1);
+		EXIT(1);
 		}
 	}
 #endif
diff --git a/crypto/ec/ectest.c b/crypto/ec/ectest.c
index a396dd8..d7e606d 100644
--- a/crypto/ec/ectest.c
+++ b/crypto/ec/ectest.c
@@ -95,7 +95,7 @@
 	fflush(stdout); \
 	fprintf(stderr, "%s:%d: ABORT\n", __FILE__, __LINE__); \
 	ERR_print_errors_fp(stderr); \
-	exit(1); \
+	EXIT(1); \
 } while (0)
 
 void prime_field_tests(void);
diff --git a/crypto/ecdh/ecdhtest.c b/crypto/ecdh/ecdhtest.c
index 32b6a9a..8af3532 100644
--- a/crypto/ecdh/ecdhtest.c
+++ b/crypto/ecdh/ecdhtest.c
@@ -70,6 +70,9 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+
+#include "../e_os.h"
+
 #ifdef OPENSSL_SYS_WINDOWS
 #include "../bio/bss_file.c" 
 #endif
@@ -298,7 +301,7 @@
 	RAND_seed(rnd_seed, sizeof rnd_seed);
 
 	out=BIO_new(BIO_s_file());
-	if (out == NULL) exit(1);
+	if (out == NULL) EXIT(1);
 	BIO_set_fp(out,stdout,BIO_NOCLOSE);
 
 	if ((ctx=BN_CTX_new()) == NULL) goto err;
@@ -330,7 +333,7 @@
 	CRYPTO_cleanup_all_ex_data();
 	ERR_remove_state(0);
 	CRYPTO_mem_leaks_fp(stderr);
-	exit(ret);
+	EXIT(ret);
 	return(ret);
 	}
 
diff --git a/crypto/evp/evp_test.c b/crypto/evp/evp_test.c
index 90294ef..447a431 100644
--- a/crypto/evp/evp_test.c
+++ b/crypto/evp/evp_test.c
@@ -49,6 +49,9 @@
 
 #include <stdio.h>
 #include <string.h>
+
+#include "../e_os.h"
+
 #include <openssl/evp.h>
 #include <openssl/engine.h>
 #include <openssl/conf.h>
@@ -78,7 +81,7 @@
 	if(!s[1])
 	    {
 	    fprintf(stderr,"Odd number of hex digits!");
-	    exit(4);
+	    EXIT(4);
 	    }
 	sscanf((char *)s,"%2x",&n);
 	*d=(unsigned char)n;
@@ -142,7 +145,7 @@
 	{
 	fprintf(stderr,"Key length doesn't match, got %d expected %d\n",kn,
 		c->key_len);
-	exit(5);
+	EXIT(5);
 	}
     EVP_CIPHER_CTX_init(&ctx);
     if (encdec != 0)
@@ -150,26 +153,26 @@
 	if(!EVP_EncryptInit_ex(&ctx,c,NULL,key,iv))
 	    {
 	    fprintf(stderr,"EncryptInit failed\n");
-	    exit(10);
+	    EXIT(10);
 	    }
 	EVP_CIPHER_CTX_set_padding(&ctx,0);
 
 	if(!EVP_EncryptUpdate(&ctx,out,&outl,plaintext,pn))
 	    {
 	    fprintf(stderr,"Encrypt failed\n");
-	    exit(6);
+	    EXIT(6);
 	    }
 	if(!EVP_EncryptFinal_ex(&ctx,out+outl,&outl2))
 	    {
 	    fprintf(stderr,"EncryptFinal failed\n");
-	    exit(7);
+	    EXIT(7);
 	    }
 
 	if(outl+outl2 != cn)
 	    {
 	    fprintf(stderr,"Ciphertext length mismatch got %d expected %d\n",
 		    outl+outl2,cn);
-	    exit(8);
+	    EXIT(8);
 	    }
 
 	if(memcmp(out,ciphertext,cn))
@@ -177,7 +180,7 @@
 	    fprintf(stderr,"Ciphertext mismatch\n");
 	    hexdump(stderr,"Got",out,cn);
 	    hexdump(stderr,"Expected",ciphertext,cn);
-	    exit(9);
+	    EXIT(9);
 	    }
 	}
 
@@ -186,26 +189,26 @@
 	if(!EVP_DecryptInit_ex(&ctx,c,NULL,key,iv))
 	    {
 	    fprintf(stderr,"DecryptInit failed\n");
-	    exit(11);
+	    EXIT(11);
 	    }
 	EVP_CIPHER_CTX_set_padding(&ctx,0);
 
 	if(!EVP_DecryptUpdate(&ctx,out,&outl,ciphertext,cn))
 	    {
 	    fprintf(stderr,"Decrypt failed\n");
-	    exit(6);
+	    EXIT(6);
 	    }
 	if(!EVP_DecryptFinal_ex(&ctx,out+outl,&outl2))
 	    {
 	    fprintf(stderr,"DecryptFinal failed\n");
-	    exit(7);
+	    EXIT(7);
 	    }
 
 	if(outl+outl2 != cn)
 	    {
 	    fprintf(stderr,"Plaintext length mismatch got %d expected %d\n",
 		    outl+outl2,cn);
-	    exit(8);
+	    EXIT(8);
 	    }
 
 	if(memcmp(out,plaintext,cn))
@@ -213,7 +216,7 @@
 	    fprintf(stderr,"Plaintext mismatch\n");
 	    hexdump(stderr,"Got",out,cn);
 	    hexdump(stderr,"Expected",plaintext,cn);
-	    exit(9);
+	    EXIT(9);
 	    }
 	}
 
@@ -260,24 +263,24 @@
     if(!EVP_DigestInit_ex(&ctx,d, NULL))
 	{
 	fprintf(stderr,"DigestInit failed\n");
-	exit(100);
+	EXIT(100);
 	}
     if(!EVP_DigestUpdate(&ctx,plaintext,pn))
 	{
 	fprintf(stderr,"DigestUpdate failed\n");
-	exit(101);
+	EXIT(101);
 	}
     if(!EVP_DigestFinal_ex(&ctx,md,&mdn))
 	{
 	fprintf(stderr,"DigestFinal failed\n");
-	exit(101);
+	EXIT(101);
 	}
     EVP_MD_CTX_cleanup(&ctx);
 
     if(mdn != cn)
 	{
 	fprintf(stderr,"Digest length mismatch, got %d expected %d\n",mdn,cn);
-	exit(102);
+	EXIT(102);
 	}
 
     if(memcmp(md,ciphertext,cn))
@@ -285,7 +288,7 @@
 	fprintf(stderr,"Digest mismatch\n");
 	hexdump(stderr,"Got",md,cn);
 	hexdump(stderr,"Expected",ciphertext,cn);
-	exit(103);
+	EXIT(103);
 	}
 
     printf("\n");
@@ -303,7 +306,7 @@
     if(argc != 2)
 	{
 	fprintf(stderr,"%s <test file>\n",argv[0]);
-	exit(1);
+	EXIT(1);
 	}
     CRYPTO_malloc_debug_init();
     CRYPTO_set_mem_debug_options(V_CRYPTO_MDEBUG_ALL);
@@ -315,7 +318,7 @@
     if(!f)
 	{
 	perror(szTestFile);
-	exit(2);
+	EXIT(2);
 	}
 
     /* Load up the software EVP_CIPHER and EVP_MD definitions */
@@ -371,7 +374,7 @@
 	   && !test_digest(cipher,plaintext,pn,ciphertext,cn))
 	    {
 	    fprintf(stderr,"Can't find %s\n",cipher);
-	    exit(3);
+	    EXIT(3);
 	    }
 	}
 
diff --git a/crypto/hmac/hmactest.c b/crypto/hmac/hmactest.c
index 96d3beb..8111901 100644
--- a/crypto/hmac/hmactest.c
+++ b/crypto/hmac/hmactest.c
@@ -60,6 +60,8 @@
 #include <string.h>
 #include <stdlib.h>
 
+#include "../e_os.h"
+
 #ifdef OPENSSL_NO_HMAC
 int main(int argc, char *argv[])
 {
@@ -144,7 +146,7 @@
 		else
 			printf("test %d ok\n",i);
 		}
-	exit(err);
+	EXIT(err);
 	return(0);
 	}
 
diff --git a/crypto/idea/ideatest.c b/crypto/idea/ideatest.c
index 2c16f95..98f805d 100644
--- a/crypto/idea/ideatest.c
+++ b/crypto/idea/ideatest.c
@@ -60,6 +60,8 @@
 #include <string.h>
 #include <stdlib.h>
 
+#include "../e_os.h"
+
 #ifdef OPENSSL_NO_IDEA
 int main(int argc, char *argv[])
 {
@@ -167,7 +169,7 @@
 	else
 		printf("ok\n");
 
-	exit(err);
+	EXIT(err);
 	return(err);
 	}
 
diff --git a/crypto/md2/md2test.c b/crypto/md2/md2test.c
index 7d3664f..d2f6dce 100644
--- a/crypto/md2/md2test.c
+++ b/crypto/md2/md2test.c
@@ -61,6 +61,8 @@
 #include <string.h>
 #include <openssl/md2.h>
 
+#include "../e_os.h"
+
 #ifdef OPENSSL_NO_MD2
 int main(int argc, char *argv[])
 {
@@ -122,7 +124,7 @@
 		R++;
 		P++;
 		}
-	exit(err);
+	EXIT(err);
 	return(0);
 	}
 
diff --git a/crypto/md4/md4test.c b/crypto/md4/md4test.c
index e0fdc42..21a77d9 100644
--- a/crypto/md4/md4test.c
+++ b/crypto/md4/md4test.c
@@ -60,6 +60,8 @@
 #include <string.h>
 #include <stdlib.h>
 
+#include "../e_os.h"
+
 #ifdef OPENSSL_NO_MD4
 int main(int argc, char *argv[])
 {
@@ -118,7 +120,7 @@
 		R++;
 		P++;
 		}
-	exit(err);
+	EXIT(err);
 	return(0);
 	}
 
diff --git a/crypto/md5/md5test.c b/crypto/md5/md5test.c
index 862b896..bfd6262 100644
--- a/crypto/md5/md5test.c
+++ b/crypto/md5/md5test.c
@@ -60,6 +60,8 @@
 #include <string.h>
 #include <stdlib.h>
 
+#include "../e_os.h"
+
 #ifdef OPENSSL_NO_MD5
 int main(int argc, char *argv[])
 {
@@ -118,7 +120,7 @@
 		R++;
 		P++;
 		}
-	exit(err);
+	EXIT(err);
 	return(0);
 	}
 
diff --git a/crypto/mdc2/mdc2test.c b/crypto/mdc2/mdc2test.c
index 6db5460..c9abe99 100644
--- a/crypto/mdc2/mdc2test.c
+++ b/crypto/mdc2/mdc2test.c
@@ -60,6 +60,8 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include "../e_os.h"
+
 #if defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_MDC2)
 #define OPENSSL_NO_MDC2
 #endif
@@ -138,7 +140,7 @@
 		printf("pad2 - ok\n");
 
 	EVP_MD_CTX_cleanup(&c);
-	exit(ret);
+	EXIT(ret);
 	return(ret);
 	}
 #endif
diff --git a/crypto/rand/randtest.c b/crypto/rand/randtest.c
index b64de61..701932e 100644
--- a/crypto/rand/randtest.c
+++ b/crypto/rand/randtest.c
@@ -60,6 +60,8 @@
 #include <stdlib.h>
 #include <openssl/rand.h>
 
+#include "../e_os.h"
+
 /* some FIPS 140-1 random number test */
 /* some simple tests */
 
@@ -209,6 +211,6 @@
 	printf("test 4 done\n");
  err:
 	err=((err)?1:0);
-	exit(err);
+	EXIT(err);
 	return(err);
 	}
diff --git a/crypto/rc2/rc2test.c b/crypto/rc2/rc2test.c
index d9a2a0a..b67bafb 100644
--- a/crypto/rc2/rc2test.c
+++ b/crypto/rc2/rc2test.c
@@ -63,6 +63,8 @@
 #include <string.h>
 #include <stdlib.h>
 
+#include "../e_os.h"
+
 #ifdef OPENSSL_NO_RC2
 int main(int argc, char *argv[])
 {
@@ -203,7 +205,7 @@
 		printf("ok\n");
 #endif
 
-	exit(err);
+	EXIT(err);
 	return(err);
 	}
 
diff --git a/crypto/rc4/rc4test.c b/crypto/rc4/rc4test.c
index a28d457..b9d8f20 100644
--- a/crypto/rc4/rc4test.c
+++ b/crypto/rc4/rc4test.c
@@ -60,6 +60,8 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include "../e_os.h"
+
 #ifdef OPENSSL_NO_RC4
 int main(int argc, char *argv[])
 {
@@ -195,7 +197,7 @@
 			}
 		}
 	printf("done\n");
-	exit(err);
+	EXIT(err);
 	return(0);
 	}
 #endif
diff --git a/crypto/rc5/rc5test.c b/crypto/rc5/rc5test.c
index f1d4c22..ce3d0cc 100644
--- a/crypto/rc5/rc5test.c
+++ b/crypto/rc5/rc5test.c
@@ -63,6 +63,8 @@
 #include <string.h>
 #include <stdlib.h>
 
+#include "../e_os.h"
+
 #ifdef OPENSSL_NO_RC5
 int main(int argc, char *argv[])
 {
@@ -318,7 +320,7 @@
 		}
 	if (err == 0) printf("cbc RC5 ok\n");
 
-	exit(err);
+	EXIT(err);
 	return(err);
 	}
 
diff --git a/crypto/ripemd/rmdtest.c b/crypto/ripemd/rmdtest.c
index be1fb8b..d4c709e 100644
--- a/crypto/ripemd/rmdtest.c
+++ b/crypto/ripemd/rmdtest.c
@@ -60,6 +60,8 @@
 #include <string.h>
 #include <stdlib.h>
 
+#include "../e_os.h"
+
 #ifdef OPENSSL_NO_RIPEMD
 int main(int argc, char *argv[])
 {
@@ -127,7 +129,7 @@
 		R++;
 		P++;
 		}
-	exit(err);
+	EXIT(err);
 	return(0);
 	}
 
diff --git a/crypto/sha/sha1test.c b/crypto/sha/sha1test.c
index 499a1cf..4f2e4ad 100644
--- a/crypto/sha/sha1test.c
+++ b/crypto/sha/sha1test.c
@@ -60,6 +60,8 @@
 #include <string.h>
 #include <stdlib.h>
 
+#include "../e_os.h"
+
 #ifdef OPENSSL_NO_SHA
 int main(int argc, char *argv[])
 {
@@ -155,7 +157,7 @@
 		}
 	else
 		printf("test 3 ok\n");
-	exit(err);
+	EXIT(err);
 	EVP_MD_CTX_cleanup(&c);
 	return(0);
 	}
diff --git a/crypto/sha/shatest.c b/crypto/sha/shatest.c
index 331294a..5d2b1d3 100644
--- a/crypto/sha/shatest.c
+++ b/crypto/sha/shatest.c
@@ -60,6 +60,8 @@
 #include <string.h>
 #include <stdlib.h>
 
+#include "../e_os.h"
+
 #ifdef OPENSSL_NO_SHA
 int main(int argc, char *argv[])
 {
@@ -156,7 +158,7 @@
 	else
 		printf("test 3 ok\n");
 	EVP_MD_CTX_cleanup(&c);
-	exit(err);
+	EXIT(err);
 	return(0);
 	}
 
diff --git a/ssl/ssltest.c b/ssl/ssltest.c
index fbdd2a9..533c098 100644
--- a/ssl/ssltest.c
+++ b/ssl/ssltest.c
@@ -564,7 +564,7 @@
 			"the test anyway (and\n-d to see what happens), "
 			"or add one of -ssl2, -ssl3, -tls1, -reuse\n"
 			"to avoid protocol mismatch.\n");
-		exit(1);
+		EXIT(1);
 		}
 
 	if (print_time)
diff --git a/test/methtest.c b/test/methtest.c
index 06ccb3b..005c2f4 100644
--- a/test/methtest.c
+++ b/test/methtest.c
@@ -96,10 +96,10 @@
 	METH_init(top);
 	METH_control(tmp1,METH_CONTROL_DUMP,stdout);
 	METH_control(tmp2,METH_CONTROL_DUMP,stdout);
-	exit(0);
+	EXIT(0);
 err:
 	ERR_load_crypto_strings();
 	ERR_print_errors_fp(stderr);
-	exit(1);
+	EXIT(1);
 	return(0);
 	}