g10: Prefer to available card keys for decryption.
[gnupg.git] / common / t-timestuff.c
index 8e5fa65..6a75925 100644 (file)
@@ -1,20 +1,31 @@
 /* t-timestuff.c - Regression tests for time functions
  * Copyright (C) 2007 Free Software Foundation, Inc.
  *
- * This file is part of JNLIB.
+ * This file is part of GnuPG.
  *
- * JNLIB is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 3 of
- * the License, or (at your option) any later version.
+ * GnuPG is free software; you can redistribute and/or modify this
+ * part of GnuPG under the terms of either
  *
- * JNLIB is distributed in the hope that it will be useful, but
+ *   - the GNU Lesser General Public License as published by the Free
+ *     Software Foundation; either version 3 of the License, or (at
+ *     your option) any later version.
+ *
+ * or
+ *
+ *   - the GNU General Public License as published by the Free
+ *     Software Foundation; either version 2 of the License, or (at
+ *     your option) any later version.
+ *
+ * or both in parallel, as here.
+ *
+ * GnuPG is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
+ * General Public License for more details.
  *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * You should have received a copies of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, see <https://www.gnu.org/licenses/>.
  */
 
 #include <config.h>
@@ -62,22 +73,20 @@ test_timegm (void)
     { -2,  0x7fffffff },
     /* Note: Because we use mktime below we can only start with the
        day after Epoch.  */
-    { 1970, 1, 2, 0, 0 , 1},
-    { 1970, 1, 2, 0, 0 , 2},
-    { 1970, 1, 2, 12, 0 , 0},
-    { 1970, 1, 2, 23, 59 , 59},
-    { 1999, 12, 31, 23, 59 , 59},
-    { 2000, 1, 1, 0, 0, 0},
-    { 2000, 1, 1, 0, 0, 1},
-    { 2010, 12, 31, 23, 59 , 59},
-    { 2010, 1, 1, 0, 0, 0},
-    { 2010, 1, 1, 0, 0, 1},
-    /* The date below is about the last time mktime works in CET on
-       Windows XP; this is a somewhat strange because 32 bit Unices
-       will happily work along for another month until they reach the
-       end of all ticks on 20380119T031408 (unless Uli takes
-       compassion on us and changes time_t to a u64).  */
-    { 2037, 12, 18, 23, 59, 59}
+    { 1970, 0, 2, 0, 0 , 1},
+    { 1970, 0, 2, 0, 0 , 2},
+    { 1970, 0, 2, 12, 0 , 0},
+    { 1970, 0, 2, 23, 59 , 59},
+    { 1999, 11, 31, 23, 59 , 59},
+    { 2000, 0, 1, 0, 0, 0},
+    { 2000, 0, 1, 0, 0, 1},
+    { 2010, 11, 31, 23, 59 , 59},
+    { 2010, 0, 1, 0, 0, 0},
+    { 2010, 0, 1, 0, 0, 1},
+    /* On GNU based 32 bit systems the end of all ticks will be on
+       20380119T031408 (unless Uli takes compassion on us and changes
+       time_t to a u64).  We check that the previous day is okay.  */
+    { 2038, 0, 18, 23, 59, 59}
 
   };
   int tidx;
@@ -103,7 +112,11 @@ test_timegm (void)
           tbuf.tm_hour = tvalues[tidx].hour;
           tbuf.tm_min  = tvalues[tidx].min;
           tbuf.tm_sec  = tvalues[tidx].sec;
+#ifdef HAVE_TIMEGM
+          now = timegm (&tbuf);
+#else
           now = mktime (&tbuf);
+#endif
         }
       if (now == (time_t)(-1))
         fail (tidx);
@@ -111,21 +124,28 @@ test_timegm (void)
       tp = gmtime (&now);
       if (!tp)
         fail (tidx);
-      tbuf = *tp;
-      tbuf2 = tbuf;
-      atime = timegm (&tbuf);
-      if (atime == (time_t)(-1))
-        fail (tidx);
-      if (atime != now)
-        fail (tidx);
-
-      tp = gmtime (&atime);
-      if (!tp)
-        fail (tidx);
-      if (cmp_time_s (tp, &tbuf))
-        fail (tidx);
-      if (cmp_time_s (tp, &tbuf2))
-        fail (tidx);
+      else
+        {
+          tbuf = *tp;
+          tbuf2 = tbuf;
+#ifdef HAVE_TIMEGM
+          atime = timegm (&tbuf);
+#else
+          atime = mktime (&tbuf);
+#endif
+          if (atime == (time_t)(-1))
+            fail (tidx);
+          else if (atime != now)
+            fail (tidx);
+
+          tp = gmtime (&atime);
+          if (!tp)
+            fail (tidx);
+          else if (cmp_time_s (tp, &tbuf))
+            fail (tidx);
+          else if (cmp_time_s (tp, &tbuf2))
+            fail (tidx);
+        }
     }
 }
 
@@ -137,6 +157,18 @@ main (int argc, char **argv)
   (void)argc;
   (void)argv;
 
+  /* If we do not have timegm, we use mktime.  However, we need to use
+     UTC in this case so that the 20380118T235959 test does not fail
+     for other timezones.  */
+#ifndef HAVE_TIMEGM
+# ifdef HAVE_SETENV
+  setenv ("TZ", "UTC", 1);
+#else
+  putenv (xstrdup ("TZ=UTC"));
+#endif
+  tzset ();
+#endif
+
   test_timegm ();
 
   return 0;