RT3548: Remove unsupported platforms
[openssl.git] / crypto / o_time.c
index 8c9363396650a9e45cdff10d44df8a82a374793d..e02b65152796d0494a2570c38b6e19ec62d6f4f2 100644 (file)
 
 #include <openssl/e_os2.h>
 #include <string.h>
-#include "o_time.h"
+#include <openssl/crypto.h>
 
 #ifdef OPENSSL_SYS_VMS
-# include <libdtdef.h>
-# include <lib$routines.h>
-# include <lnmdef.h>
-# include <starlet.h>
-# include <descrip.h>
-# include <stdlib.h>
+# if __CRTL_VER >= 70000000 && \
+     (defined _POSIX_C_SOURCE || !defined _ANSI_C_SOURCE)
+#  define VMS_GMTIME_OK
+# endif
+# ifndef VMS_GMTIME_OK
+#  include <libdtdef.h>
+#  include <lib$routines.h>
+#  include <lnmdef.h>
+#  include <starlet.h>
+#  include <descrip.h>
+#  include <stdlib.h>
+# endif /* ndef VMS_GMTIME_OK */
 #endif
 
 struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result)
        {
        struct tm *ts = NULL;
 
-#if defined(OPENSSL_THREADS) && !defined(OPENSSL_SYS_WIN32) && !defined(OPENSSL_SYS_OS2) && (!defined(OPENSSL_SYS_VMS) || defined(gmtime_r)) && !defined(OPENSSL_SYS_MACOSX) && !defined(OPENSSL_SYS_SUNOS)
+#if defined(OPENSSL_THREADS) && !defined(OPENSSL_SYS_WIN32) && !defined(OPENSSL_SYS_OS2) && (!defined(OPENSSL_SYS_VMS) || defined(gmtime_r)) && !defined(OPENSSL_SYS_MACOSX)
        /* should return &data, but doesn't on some systems,
           so we don't even look at the return value */
        gmtime_r(timer,result);
        ts = result;
-#elif !defined(OPENSSL_SYS_VMS)
+#elif !defined(OPENSSL_SYS_VMS) || defined(VMS_GMTIME_OK)
        ts = gmtime(timer);
        if (ts == NULL)
                return NULL;
@@ -89,7 +95,7 @@ struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result)
        memcpy(result, ts, sizeof(struct tm));
        ts = result;
 #endif
-#ifdef OPENSSL_SYS_VMS
+#if defined( OPENSSL_SYS_VMS) && !defined( VMS_GMTIME_OK)
        if (ts == NULL)
                {
                static $DESCRIPTOR(tabnam,"LNM$DCL_LOGICAL");
@@ -142,7 +148,8 @@ struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result)
                /* Since there was no gmtime_r() to do this stuff for us,
                   we have to do it the hard way. */
                {
-               /* The VMS epoch is the astronomical Smithsonian date,
+               /*-
+                * The VMS epoch is the astronomical Smithsonian date,
                   if I remember correctly, which is November 17, 1858.
                   Furthermore, time is measure in thenths of microseconds
                   and stored in quadwords (64 bit integers).  unix_epoch
@@ -228,7 +235,7 @@ struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result)
 
 static long date_to_julian(int y, int m, int d);
 static void julian_to_date(long jd, int *y, int *m, int *d);
-static int julian_adj(struct tm *tm, int off_day, long offset_sec,
+static int julian_adj(const struct tm *tm, int off_day, long offset_sec,
                long *pday, int *psec);
 
 int OPENSSL_gmtime_adj(struct tm *tm, int off_day, long offset_sec)
@@ -261,7 +268,8 @@ int OPENSSL_gmtime_adj(struct tm *tm, int off_day, long offset_sec)
                
 }
 
-int OPENSSL_gmtime_diff(struct tm *from, struct tm *to, int *pday, int *psec)
+int OPENSSL_gmtime_diff(int *pday, int *psec,
+                       const struct tm *from, const struct tm *to)
        {
        int from_sec, to_sec, diff_sec;
        long from_jd, to_jd, diff_day;
@@ -283,8 +291,10 @@ int OPENSSL_gmtime_diff(struct tm *from, struct tm *to, int *pday, int *psec)
                diff_sec -= SECS_PER_DAY;
                }
 
-       *pday = (int)diff_day;
-       *psec = diff_sec;
+       if (pday)
+               *pday = (int)diff_day;
+       if (psec)
+               *psec = diff_sec;
 
        return 1;
 
@@ -292,7 +302,7 @@ int OPENSSL_gmtime_diff(struct tm *from, struct tm *to, int *pday, int *psec)
        
        
 /* Convert tm structure and offset into julian day and seconds */
-static int julian_adj(struct tm *tm, int off_day, long offset_sec,
+static int julian_adj(const struct tm *tm, int off_day, long offset_sec,
                long *pday, int *psec)
        {
        int offset_hms, offset_day;