aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2004-07-19 07:50:43 +0000
committerRichard Levitte <levitte@openssl.org>2004-07-19 07:50:43 +0000
commit334ef049492368c7eb032d507e571f41a3fed779 (patch)
tree44c3e2616349d571a6bec1177ff13d454e2880b9
parent859ceeeb5174ce50842112c05230cebb59702e83 (diff)
downloadopenssl-334ef049492368c7eb032d507e571f41a3fed779.tar.gz
Since version 7.0, The C RTL in VMS handles time in terms of UTC
instead of local time.
-rw-r--r--crypto/o_time.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/crypto/o_time.c b/crypto/o_time.c
index 785468131e..e29091d650 100644
--- a/crypto/o_time.c
+++ b/crypto/o_time.c
@@ -114,16 +114,28 @@ struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result)
return NULL;
logvalue[reslen] = '\0';
+ t = *timer;
+
+/* The following is extracted from the DEC C header time.h */
+/*
+** Beginning in OpenVMS Version 7.0 mktime, time, ctime, strftime
+** have two implementations. One implementation is provided
+** for compatibility and deals with time in terms of local time,
+** the other __utc_* deals with time in terms of UTC.
+*/
+/* We use the same conditions as in said time.h to check if we should
+ assume that t contains local time (and should therefore be adjusted)
+ or UTC (and should therefore be left untouched). */
+#if __CRTL_VER < 70000000 || defined _VMS_V6_SOURCE
/* Get the numerical value of the equivalence string */
status = atoi(logvalue);
/* and use it to move time to GMT */
- t = *timer - status;
+ t -= status;
+#endif
/* then convert the result to the time structure */
-#ifndef OPENSSL_THREADS
- ts=(struct tm *)localtime(&t);
-#else
+
/* Since there was no gmtime_r() to do this stuff for us,
we have to do it the hard way. */
{
@@ -198,7 +210,6 @@ struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result)
result->tm_isdst = 0; /* There's no way to know... */
ts = result;
-#endif
}
}
#endif