Borland C++ 5.5 does not use underscored _ftime and _timeb, therefore 
code in ./crypto/bio/bss_dgram.c and ./ssl/d1_lib.c breaks. The quick 
hack to fix this would be to add defines in e_os.h in the __BORLANDC__ 
block:
--- e_os.h.orig Mon May 31 14:18:08 2010
+++ e_os.h      Tue Jan 11 12:41:04 2011
@@ -348,6 +348,8 @@
  #    define _O_BINARY O_BINARY
  #    define _int64 __int64
  #    define _kbhit kbhit
+#    define _ftime ftime
+#    define _timeb timeb
  #  endif

  #  define EXIT(n) exit(n)

but I'd suggest to go another route and clean up the code in 
./crypto/bio/bss_dgram.c and ./ssl/d1_lib.c a bit:
--- e_os.h.orig Mon May 31 14:18:08 2010
+++ e_os.h      Tue Jan 11 12:51:05 2011
@@ -345,12 +345,15 @@
  #  if defined (__BORLANDC__)
  #    define _setmode setmode
  #    define _O_TEXT O_TEXT
  #    define _O_BINARY O_BINARY
  #    define _int64 __int64
  #    define _kbhit kbhit
+#  else
+#    define ftime _ftime
+#    define timeb _timeb
  #  endif

  #  define EXIT(n) exit(n)
  #  define LIST_SEPARATOR_CHAR ';'
  #  ifndef X_OK
  #    define X_OK      0
#############################################################
--- crypto/bio/bss_dgram.c.orig Thu Jan 07 11:44:21 2010
+++ crypto/bio/bss_dgram.c      Tue Jan 11 12:54:43 2011
@@ -814,12 +814,7 @@

  static void get_current_time(struct timeval *t)
        {
-#ifdef OPENSSL_SYS_WIN32
-       struct _timeb tb;
-       _ftime(&tb);
-       t->tv_sec = (long)tb.time;
-       t->tv_usec = (long)tb.millitm * 1000;
-#elif defined(OPENSSL_SYS_VMS)
+#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS)
        struct timeb tb;
        ftime(&tb);
        t->tv_sec = (long)tb.time;
#############################################################
--- ssl/d1_lib.c.orig   Tue Apr 06 13:29:21 2010
+++ ssl/d1_lib.c        Tue Jan 11 12:56:21 2011
@@ -364,12 +364,7 @@

  static void get_current_time(struct timeval *t)
  {
-#ifdef OPENSSL_SYS_WIN32
-       struct _timeb tb;
-       _ftime(&tb);
-       t->tv_sec = (long)tb.time;
-       t->tv_usec = (long)tb.millitm * 1000;
-#elif defined(OPENSSL_SYS_VMS)
+#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS)
        struct timeb tb;
        ftime(&tb);
        t->tv_sec = (long)tb.time;

attached patch is against OpenSSL 1.0.0c.


--- e_os.h.orig Mon May 31 14:18:08 2010
+++ e_os.h      Tue Jan 11 12:51:05 2011
@@ -345,12 +345,15 @@
 #  if defined (__BORLANDC__)
 #    define _setmode setmode
 #    define _O_TEXT O_TEXT
 #    define _O_BINARY O_BINARY
 #    define _int64 __int64
 #    define _kbhit kbhit
+#  else
+#    define ftime _ftime
+#    define timeb _timeb
 #  endif
 
 #  define EXIT(n) exit(n)
 #  define LIST_SEPARATOR_CHAR ';'
 #  ifndef X_OK
 #    define X_OK       0
############################################################# 
--- crypto/bio/bss_dgram.c.orig Thu Jan 07 11:44:21 2010
+++ crypto/bio/bss_dgram.c      Tue Jan 11 12:54:43 2011
@@ -814,12 +814,7 @@
 
 static void get_current_time(struct timeval *t)
        {
-#ifdef OPENSSL_SYS_WIN32
-       struct _timeb tb;
-       _ftime(&tb);
-       t->tv_sec = (long)tb.time;
-       t->tv_usec = (long)tb.millitm * 1000;
-#elif defined(OPENSSL_SYS_VMS)
+#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS)
        struct timeb tb;
        ftime(&tb);
        t->tv_sec = (long)tb.time;
############################################################# 
--- ssl/d1_lib.c.orig   Tue Apr 06 13:29:21 2010
+++ ssl/d1_lib.c        Tue Jan 11 12:56:21 2011
@@ -364,12 +364,7 @@
 
 static void get_current_time(struct timeval *t)
 {
-#ifdef OPENSSL_SYS_WIN32
-       struct _timeb tb;
-       _ftime(&tb);
-       t->tv_sec = (long)tb.time;
-       t->tv_usec = (long)tb.millitm * 1000;
-#elif defined(OPENSSL_SYS_VMS)
+#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS)
        struct timeb tb;
        ftime(&tb);
        t->tv_sec = (long)tb.time;

Reply via email to