Merged change from readdir_r() to readdir() + threading
diff --git a/ChangeLog b/ChangeLog
index 4b05115..7bf2a67 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,7 @@
    * gen_prime() speedup
    * Speedup of ECP multiplication operation
    * Relaxed some SHA2 ciphersuite's version requirements
+   * Dropped use of readdir_r() instead of readdir() with threading support
 
 Bugfix
    * Fixed X.509 hostname comparison (with non-regular characters)
diff --git a/programs/pkey/dh_client.c b/programs/pkey/dh_client.c
index 18027fa..2d729df 100644
--- a/programs/pkey/dh_client.c
+++ b/programs/pkey/dh_client.c
@@ -215,7 +215,7 @@
     fflush( stdout );
 
     n = dhm.len;
-    if( ( ret = dhm_make_public( &dhm, dhm.len, buf, n,
+    if( ( ret = dhm_make_public( &dhm, (int) dhm.len, buf, n,
                                  ctr_drbg_random, &ctr_drbg ) ) != 0 )
     {
         printf( " failed\n  ! dhm_make_public returned %d\n\n", ret );
diff --git a/programs/pkey/dh_server.c b/programs/pkey/dh_server.c
index d2b6cc4..245f6f0 100644
--- a/programs/pkey/dh_server.c
+++ b/programs/pkey/dh_server.c
@@ -178,7 +178,7 @@
 
     memset( buf, 0, sizeof( buf ) );
 
-    if( ( ret = dhm_make_params( &dhm, mpi_size( &dhm.P ), buf, &n,
+    if( ( ret = dhm_make_params( &dhm, (int) mpi_size( &dhm.P ), buf, &n,
                                  ctr_drbg_random, &ctr_drbg ) ) != 0 )
     {
         printf( " failed\n  ! dhm_make_params returned %d\n\n", ret );
diff --git a/programs/pkey/key_app.c b/programs/pkey/key_app.c
index 796f237..e6e9765 100644
--- a/programs/pkey/key_app.c
+++ b/programs/pkey/key_app.c
@@ -149,7 +149,7 @@
             fgets( buf, sizeof(buf), f );
             fclose( f );
 
-            i = strlen( buf );
+            i = (int) strlen( buf );
             if( buf[i - 1] == '\n' ) buf[i - 1] = '\0';
             if( buf[i - 2] == '\r' ) buf[i - 2] = '\0';
             opt.password = buf;
diff --git a/programs/ssl/ssl_fork_server.c b/programs/ssl/ssl_fork_server.c
index 02de364..3d2c02c 100644
--- a/programs/ssl/ssl_fork_server.c
+++ b/programs/ssl/ssl_fork_server.c
@@ -32,9 +32,12 @@
 #include <string.h>
 #include <stdlib.h>
 #include <stdio.h>
-#include <unistd.h>
 #include <signal.h>
 
+#if !defined(_MSC_VER) || defined(EFIX64) || defined(EFI32)
+#include <unistd.h>
+#endif
+
 #include "polarssl/entropy.h"
 #include "polarssl/ctr_drbg.h"
 #include "polarssl/certs.h"
diff --git a/programs/ssl/ssl_mail_client.c b/programs/ssl/ssl_mail_client.c
index 70ba622..a3e9f2b 100644
--- a/programs/ssl/ssl_mail_client.c
+++ b/programs/ssl/ssl_mail_client.c
@@ -28,7 +28,14 @@
 #include <string.h>
 #include <stdlib.h>
 #include <stdio.h>
+
+#if !defined(_MSC_VER) || defined(EFIX64) || defined(EFI32)
 #include <unistd.h>
+#else
+#include <io.h>
+#define read _read
+#define write _write
+#endif
 
 #if defined(_WIN32) || defined(_WIN32_WCE)
 
diff --git a/programs/ssl/ssl_server.c b/programs/ssl/ssl_server.c
index b4883aa..7b8ae35 100644
--- a/programs/ssl/ssl_server.c
+++ b/programs/ssl/ssl_server.c
@@ -221,28 +221,6 @@
     /*
      * 3. Wait until a client connects
      */
-#if defined(_WIN32_WCE)
-    {
-        SHELLEXECUTEINFO sei;
-
-        ZeroMemory( &sei, sizeof( SHELLEXECUTEINFO ) );
-
-        sei.cbSize = sizeof( SHELLEXECUTEINFO );
-        sei.fMask = 0;
-        sei.hwnd = 0;
-        sei.lpVerb = _T( "open" );
-        sei.lpFile = _T( "https://localhost:4433/" );
-        sei.lpParameters = NULL;
-        sei.lpDirectory = NULL;
-        sei.nShow = SW_SHOWNORMAL;
-
-        ShellExecuteEx( &sei );
-    }
-#elif defined(_WIN32)
-    ShellExecute( NULL, "open", "https://localhost:4433/",
-                  NULL, NULL, SW_SHOWNORMAL );
-#endif
-
     client_fd = -1;
 
     printf( "  . Waiting for a remote connection ..." );
diff --git a/programs/ssl/ssl_server2.c b/programs/ssl/ssl_server2.c
index 2a046a7..96cbb49 100644
--- a/programs/ssl/ssl_server2.c
+++ b/programs/ssl/ssl_server2.c
@@ -770,28 +770,6 @@
     /*
      * 3. Wait until a client connects
      */
-#if defined(_WIN32_WCE)
-    {
-        SHELLEXECUTEINFO sei;
-
-        ZeroMemory( &sei, sizeof( SHELLEXECUTEINFO ) );
-
-        sei.cbSize = sizeof( SHELLEXECUTEINFO );
-        sei.fMask = 0;
-        sei.hwnd = 0;
-        sei.lpVerb = _T( "open" );
-        sei.lpFile = _T( "https://localhost:4433/" );
-        sei.lpParameters = NULL;
-        sei.lpDirectory = NULL;
-        sei.nShow = SW_SHOWNORMAL;
-
-        ShellExecuteEx( &sei );
-    }
-#elif defined(_WIN32)
-    ShellExecute( NULL, "open", "https://localhost:4433/",
-                  NULL, NULL, SW_SHOWNORMAL );
-#endif
-
     client_fd = -1;
 
     printf( "  . Waiting for a remote connection ..." );
diff --git a/programs/test/benchmark.c b/programs/test/benchmark.c
index 4d5a06b..34219c5 100644
--- a/programs/test/benchmark.c
+++ b/programs/test/benchmark.c
@@ -419,13 +419,13 @@
             mpi_read_string( &dhm.P, 16, dhm_P[i] );
             mpi_read_string( &dhm.G, 16, dhm_G[i] );
             dhm.len = mpi_size( &dhm.P );
-            dhm_make_public( &dhm, dhm.len, buf, dhm.len, myrand, NULL );
+            dhm_make_public( &dhm, (int) dhm.len, buf, dhm.len, myrand, NULL );
             mpi_copy( &dhm.GY, &dhm.GX );
 
             snprintf( title, sizeof( title ), "DHE-%d", dhm_sizes[i] );
             TIME_PUBLIC( title, "handshake",
                     olen = sizeof( buf );
-                    ret |= dhm_make_public( &dhm, dhm.len, buf, dhm.len,
+                    ret |= dhm_make_public( &dhm, (int) dhm.len, buf, dhm.len,
                                             myrand, NULL );
                     ret |= dhm_calc_secret( &dhm, buf, &olen, myrand, NULL ) );
 
diff --git a/programs/test/ssl_test.c b/programs/test/ssl_test.c
index debdb07..2162132 100644
--- a/programs/test/ssl_test.c
+++ b/programs/test/ssl_test.c
@@ -434,7 +434,7 @@
 
 int main( int argc, char *argv[] )
 {
-    int i, j, n;
+    int i;
     const int *list;
     int ret = 1;
     int nb_conn;
@@ -474,14 +474,6 @@
 
     for( i = 1; i < argc; i++ )
     {
-        n = strlen( argv[i] );
-
-        for( j = 0; j < n; j++ )
-        {
-            if( argv[i][j] >= 'A' && argv[i][j] <= 'Z' )
-                argv[i][j] |= 0x20;
-        }
-
         p = argv[i];
         if( ( q = strchr( p, '=' ) ) == NULL )
             continue;
diff --git a/programs/util/pem2der.c b/programs/util/pem2der.c
index f372684..f1da438 100644
--- a/programs/util/pem2der.c
+++ b/programs/util/pem2der.c
@@ -174,7 +174,7 @@
     unsigned char der_buffer[4096];
     char buf[1024];
     size_t pem_size, der_size = sizeof(der_buffer);
-    int i, j, n;
+    int i;
     char *p, *q;
 
     /*
@@ -201,13 +201,6 @@
             goto usage;
         *q++ = '\0';
 
-        n = strlen( p );
-        for( j = 0; j < n; j++ )
-        {
-            if( argv[i][j] >= 'A' && argv[i][j] <= 'Z' )
-                argv[i][j] |= 0x20;
-        }
-
         if( strcmp( p, "filename" ) == 0 )
             opt.filename = q;
         else if( strcmp( p, "output_file" ) == 0 )
diff --git a/programs/x509/cert_req.c b/programs/x509/cert_req.c
index 2388dc9..c738b4a 100644
--- a/programs/x509/cert_req.c
+++ b/programs/x509/cert_req.c
@@ -128,7 +128,7 @@
     int ret = 0;
     pk_context key;
     char buf[1024];
-    int i, j, n;
+    int i;
     char *p, *q, *r;
     x509write_csr req;
     entropy_context entropy;
@@ -166,13 +166,6 @@
             goto usage;
         *q++ = '\0';
 
-        n = strlen( p );
-        for( j = 0; j < n; j++ )
-        {
-            if( argv[i][j] >= 'A' && argv[i][j] <= 'Z' )
-                argv[i][j] |= 0x20;
-        }
-
         if( strcmp( p, "filename" ) == 0 )
             opt.filename = q;
         else if( strcmp( p, "output_file" ) == 0 )
diff --git a/programs/x509/cert_write.c b/programs/x509/cert_write.c
index beac089..a2f2656 100644
--- a/programs/x509/cert_write.c
+++ b/programs/x509/cert_write.c
@@ -183,7 +183,7 @@
                 *subject_key = &loaded_subject_key;
     char buf[1024];
     char issuer_name[128];
-    int i, j, n;
+    int i;
     char *p, *q, *r;
 #if defined(POLARSSL_X509_CSR_PARSE_C)
     char subject_name[128];
@@ -244,13 +244,6 @@
             goto usage;
         *q++ = '\0';
 
-        n = strlen( p );
-        for( j = 0; j < n; j++ )
-        {
-            if( argv[i][j] >= 'A' && argv[i][j] <= 'Z' )
-                argv[i][j] |= 0x20;
-        }
-
         if( strcmp( p, "request_file" ) == 0 )
             opt.request_file = q;
         else if( strcmp( p, "subject_key" ) == 0 )
diff --git a/programs/x509/crl_app.c b/programs/x509/crl_app.c
index 4bc3703..0e4cd88 100644
--- a/programs/x509/crl_app.c
+++ b/programs/x509/crl_app.c
@@ -66,7 +66,7 @@
     int ret = 0;
     unsigned char buf[100000];
     x509_crl crl;
-    int i, j, n;
+    int i;
     char *p, *q;
 
     /*
@@ -85,14 +85,6 @@
 
     for( i = 1; i < argc; i++ )
     {
-        n = strlen( argv[i] );
-
-        for( j = 0; j < n; j++ )
-        {
-            if( argv[i][j] >= 'A' && argv[i][j] <= 'Z' )
-                argv[i][j] |= 0x20;
-        }
-
         p = argv[i];
         if( ( q = strchr( p, '=' ) ) == NULL )
             goto usage;
diff --git a/programs/x509/req_app.c b/programs/x509/req_app.c
index 9f478f2..1f9d628 100644
--- a/programs/x509/req_app.c
+++ b/programs/x509/req_app.c
@@ -66,7 +66,7 @@
     int ret = 0;
     unsigned char buf[100000];
     x509_csr csr;
-    int i, j, n;
+    int i;
     char *p, *q;
 
     /*
@@ -85,14 +85,6 @@
 
     for( i = 1; i < argc; i++ )
     {
-        n = strlen( argv[i] );
-
-        for( j = 0; j < n; j++ )
-        {
-            if( argv[i][j] >= 'A' && argv[i][j] <= 'Z' )
-                argv[i][j] |= 0x20;
-        }
-
         p = argv[i];
         if( ( q = strchr( p, '=' ) ) == NULL )
             goto usage;