]> Dogcows Code - chaz/tar/blobdiff - lib/getdate.y
Initial revision
[chaz/tar] / lib / getdate.y
index e00e77480db59cbde232b9bff3ee88675489f3e9..eb1fe7bef7ebc854208a95ec0a6598a2e6d14484 100644 (file)
@@ -73,7 +73,7 @@
 # include <string.h>
 #endif
 
-#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
+#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
 # define __attribute__(x)
 #endif
 
@@ -503,7 +503,7 @@ static table const relative_time_table[] =
   { "TODAY",   tMINUTE_UNIT,    0 },
   { "NOW",     tMINUTE_UNIT,    0 },
   { "LAST",    tUNUMBER,       -1 },
-  { "THIS",    tMINUTE_UNIT,    0 },
+  { "THIS",    tUNUMBER,        0 },
   { "NEXT",    tUNUMBER,        1 },
   { "FIRST",   tUNUMBER,        1 },
 /*{ "SECOND",  tUNUMBER,        2 }, */
@@ -831,7 +831,10 @@ yyerror (char *s ATTRIBUTE_UNUSED)
   return 0;
 }
 
-/* ?? */
+/* Parse a date/time string P.  Return the corresponding time_t value,
+   or (time_t) -1 if there is an error.  P can be an incomplete or
+   relative time specification; if so, use *NOW as the basis for the
+   returned time.  */
 time_t
 get_date (const char *p, const time_t *now)
 {
@@ -876,18 +879,18 @@ get_date (const char *p, const time_t *now)
   /* Probe the names used in the next three calendar quarters, looking
      for a tm_isdst different from the one we already have.  */
   {
-    int probe;
-    for (probe = 1; probe <= 3; probe++)
+    int quarter;
+    for (quarter = 1; quarter <= 3; quarter++)
       {
-       time_t probe = Start + probe * (90 * 24 * 60 * 60);
-       struct tm *tm = localtime (&probe);
-       if (tm && tm->tm_zone
-           && tm->tm_isdst != pc.local_time_zone_table[0].value)
+       time_t probe = Start + quarter * (90 * 24 * 60 * 60);
+       struct tm *probe_tm = localtime (&probe);
+       if (probe_tm && probe_tm->tm_zone
+           && probe_tm->tm_isdst != pc.local_time_zone_table[0].value)
          {
              {
-               pc.local_time_zone_table[1].name = tm->tm_zone;
+               pc.local_time_zone_table[1].name = probe_tm->tm_zone;
                pc.local_time_zone_table[1].type = tLOCAL_ZONE;
-               pc.local_time_zone_table[1].value = tm->tm_isdst;
+               pc.local_time_zone_table[1].value = probe_tm->tm_isdst;
                pc.local_time_zone_table[2].name = 0;
              }
            break;
@@ -1011,7 +1014,7 @@ get_date (const char *p, const time_t *now)
       if (! gmt)
        return -1;
       delta = pc.time_zone * 60 + difftm (gmt, &tm);
-      if ((Start - delta < Start) != (delta < 0))
+      if ((Start < Start - delta) != (delta < 0))
        return -1;      /* time_t overflow */
       Start -= delta;
     }
This page took 0.02499 seconds and 4 git commands to generate.