Avoid signed vs. unsigned warnings (which are treated like errors on
[openssl.git] / crypto / asn1 / a_utctm.c
index d381c9e0d1e6e8807774479da04681b6f1194cb0..999852dae5270086e2066de76d9d07dccb6912de 100644 (file)
 
 #include <stdio.h>
 #include <time.h>
-#ifdef VMS
-#include <descrip.h>
-#include <lnmdef.h>
-#include <starlet.h>
-#endif
 #include "cryptlib.h"
+#include "o_time.h"
 #include <openssl/asn1.h>
 
-ASN1_UTCTIME *ASN1_UTCTIME_new(void)
-{ return M_ASN1_UTCTIME_new(); }
-
-void ASN1_UTCTIME_free(ASN1_UTCTIME *x)
-{ M_ASN1_UTCTIME_free(x); }
-
+#if 0
 int i2d_ASN1_UTCTIME(ASN1_UTCTIME *a, unsigned char **pp)
        {
 #ifndef CHARSET_EBCDIC
@@ -119,6 +110,8 @@ err:
        return(NULL);
        }
 
+#endif
+
 int ASN1_UTCTIME_check(ASN1_UTCTIME *d)
        {
        static int min[8]={ 0, 1, 1, 0, 0, 0, 0, 0};
@@ -182,6 +175,7 @@ int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, char *str)
                        {
                        ASN1_STRING_set((ASN1_STRING *)s,
                                (unsigned char *)str,t.length);
+                       s->type = V_ASN1_UTCTIME;
                        }
                return(1);
                }
@@ -193,71 +187,30 @@ ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t)
        {
        char *p;
        struct tm *ts;
-#if defined(THREADS) && !defined(WIN32) && !defined(__CYGWIN32__)
-
        struct tm data;
-#endif
+       size_t len = 20;
 
        if (s == NULL)
                s=M_ASN1_UTCTIME_new();
        if (s == NULL)
                return(NULL);
 
-#if defined(THREADS) && !defined(WIN32) && !defined(__CYGWIN32__)
-       gmtime_r(&t,&data); /* should return &data, but doesn't on some systems, so we don't even look at the return value */
-       ts=&data;
-#else
-       ts=gmtime(&t);
-#endif
-#ifdef VMS
+       ts=OPENSSL_gmtime(&t, &data);
        if (ts == NULL)
-               {
-               static $DESCRIPTOR(tabnam,"LNM$DCL_LOGICAL");
-               static $DESCRIPTOR(lognam,"SYS$TIMEZONE_DIFFERENTIAL");
-               char result[256];
-               unsigned int reslen = 0;
-               struct {
-                       short buflen;
-                       short code;
-                       void *bufaddr;
-                       unsigned int *reslen;
-               } itemlist[] = {
-                       { 0, LNM$_STRING, 0, 0 },
-                       { 0, 0, 0, 0 },
-               };
-               int status;
-
-               /* Get the value for SYS$TIMEZONE_DIFFERENTIAL */
-               itemlist[0].buflen = sizeof(result);
-               itemlist[0].bufaddr = result;
-               itemlist[0].reslen = &reslen;
-               status = sys$trnlnm(0, &tabnam, &lognam, 0, itemlist);
-               if (!(status & 1))
-                       return NULL;
-               result[reslen] = '\0';
-
-               /* Get the numerical value of the equivalence string */
-               status = atoi(result);
-
-               /* and use it to move time to GMT */
-               t -= status;
-
-               /* then convert the result to the time structure */
-               ts=(struct tm *)localtime(&t);
-               }
-#endif
+               return(NULL);
+
        p=(char *)s->data;
-       if ((p == NULL) || (s->length < 14))
+       if ((p == NULL) || ((size_t)s->length < len))
                {
-               p=OPENSSL_malloc(20);
+               p=OPENSSL_malloc(len);
                if (p == NULL) return(NULL);
                if (s->data != NULL)
                        OPENSSL_free(s->data);
                s->data=(unsigned char *)p;
                }
 
-       sprintf(p,"%02d%02d%02d%02d%02d%02dZ",ts->tm_year%100,
-               ts->tm_mon+1,ts->tm_mday,ts->tm_hour,ts->tm_min,ts->tm_sec);
+       BIO_snprintf(p,len,"%02d%02d%02d%02d%02d%02dZ",ts->tm_year%100,
+                    ts->tm_mon+1,ts->tm_mday,ts->tm_hour,ts->tm_min,ts->tm_sec);
        s->length=strlen(p);
        s->type=V_ASN1_UTCTIME;
 #ifdef CHARSET_EBCDIC_not
@@ -270,6 +223,7 @@ ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t)
 int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t)
        {
        struct tm *tm;
+       struct tm data;
        int offset;
        int year;
 
@@ -286,11 +240,7 @@ int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t)
 
        t -= offset*60; /* FIXME: may overflow in extreme cases */
 
-#if defined(THREADS) && !defined(WIN32) && !defined(__CYGWIN32__)
-       { struct tm data; gmtime_r(&t, &data); tm = &data; }
-#else
-       tm = gmtime(&t);
-#endif
+       tm = OPENSSL_gmtime(&t, &data);
        
 #define return_cmp(a,b) if ((a)<(b)) return -1; else if ((a)>(b)) return 1
        year = g2(s->data);