false positive “ot”
[alioth/cvs.git] / lib / getdate.c
index 3e0ac51..8792514 100644 (file)
@@ -1,5 +1,3 @@
-/* patched to define "union YYSTYPE" as well  --mirabilos */
-
 /* A Bison parser, made by GNU Bison 2.3.  */
 
 /* Skeleton implementation for Bison's Yacc-like parsers in C
 
 /* Parse a string into an internal time stamp.
 
-   Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005 Free Software
-   Foundation, Inc.
+   Copyright (C) 1995, 1997, 1998, 2003, 2004, 2005
+   Free Software Foundation, Inc.
+
+   Copyright (c) 2005, 2006, 2007, 2010, 2016, 2017
+   mirabilos <m@mirbsd.org>
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -186,13 +187,22 @@ size_t strlcat(char *, const char *, size_t);
 #include <stdlib.h>
 #include <string.h>
 
+#ifndef _STDLIB_H
+#define _STDLIB_H 1 /* GNU bison needs this */
+#endif
+
 #ifndef IN_RCS
 #include "setenv.h"
 #include "xalloc.h"
 #else /* IN_RCS */
 #include <unistd.h>
 
-void *
+#define HAVE_STRUCT_TM_TM_ZONE 1
+#define HAVE_TM_GMTOFF 1
+
+#define gettime(ts)    clock_gettime(CLOCK_REALTIME,(ts))
+
+static void *
 xmalloc(size_t s)
 {
        static const char xmalloc_enomem[] = "memory exhausted\n";
@@ -206,14 +216,15 @@ xmalloc(size_t s)
        return (x);
 }
 
-void *
+static void *
 xmemdup(void const *p, size_t s)
 {
        return (memcpy(xmalloc(s), p, s));
 }
 #endif /* IN_RCS */
 
-#if STDC_HEADERS || (! defined isascii && ! HAVE_ISASCII)
+#if (defined(STDC_HEADERS) && STDC_HEADERS) || \
+    (!defined(isascii) && !HAVE_ISASCII)
 # define IN_CTYPE_DOMAIN(c) 1
 #else
 # define IN_CTYPE_DOMAIN(c) isascii (c)
@@ -232,7 +243,8 @@ xmemdup(void const *p, size_t s)
    of `digit' even when the host does not conform to POSIX.  */
 #define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9)
 
-#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
+#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || \
+    (defined(__STRICT_ANSI__) && __STRICT_ANSI__)
 # define __attribute__(x)
 #endif
 
@@ -240,8 +252,14 @@ xmemdup(void const *p, size_t s)
 # define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
 #endif
 
-__RCSID("$MirOS: src/gnu/usr.bin/cvs/lib/getdate.c,v 1.12 2011/06/11 03:37:36 tg Exp $");
-__RCSID("$miros: src/gnu/usr.bin/cvs/lib/getdate.y,v 1.6.2.5 2010/09/18 19:17:41 tg Exp $");
+#ifndef __IDSTRING
+#define __IDSTRING(varname, string) \
+       static const char varname[] __attribute__((__used__)) = \
+           "@(""#)" #varname ": " string
+#endif
+
+__IDSTRING(rcsid_code, "$MirOS: src/gnu/usr.bin/cvs/lib/getdate.c,v 1.18 2017/03/26 15:57:46 tg Exp $");
+__IDSTRING(rcsid_bron, "$miros: src/gnu/usr.bin/cvs/lib/getdate.y,v 1.12 2017/03/26 15:54:06 tg Exp $");
 
 /* Shift A right by B bits portably, by dividing A by 2**B and
    truncating towards minus infinity.  A and B should be free of side
@@ -339,7 +357,7 @@ typedef struct
 
 union YYSTYPE;
 static int yylex (union YYSTYPE *, parser_control *);
-static int yyerror (parser_control *, char *);
+static int yyerror (parser_control *, const char *);
 static long int time_zone_hhmm (textint, long int);
 
 
@@ -364,14 +382,14 @@ static long int time_zone_hhmm (textint, long int);
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 240 "getdate.y"
+#line 260 "getdate.y"
 {
   long int intval;
   textint textintval;
   struct timespec timespec;
 }
 /* Line 193 of yacc.c.  */
-#line 373 "getdate.c"
+#line 393 "getdate.c"
        YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -384,7 +402,7 @@ typedef union YYSTYPE
 
 
 /* Line 216 of yacc.c.  */
-#line 386 "getdate.c"
+#line 406 "getdate.c"
 
 #ifdef short
 # undef short
@@ -434,7 +452,7 @@ typedef short int yytype_int16;
 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
 
 #ifndef YY_
-# if YYENABLE_NLS
+# if defined(YYENABLE_NLS) && YYENABLE_NLS
 #  if ENABLE_NLS
 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
@@ -696,14 +714,14 @@ static const yytype_int8 yyrhs[] =
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   261,   261,   262,   266,   273,   275,   279,   281,   283,
-     285,   287,   289,   291,   295,   303,   311,   321,   328,   340,
-     345,   353,   355,   357,   359,   361,   366,   371,   376,   381,
-     389,   394,   414,   421,   429,   437,   442,   448,   453,   462,
-     472,   476,   478,   480,   482,   484,   486,   488,   490,   492,
-     494,   496,   498,   500,   502,   504,   506,   508,   510,   512,
-     514,   516,   520,   522,   524,   526,   528,   530,   534,   534,
-     537,   538,   543,   544,   549,   587,   588,   594,   595
+       0,   281,   281,   282,   286,   293,   295,   299,   301,   303,
+     305,   307,   309,   311,   315,   323,   331,   341,   348,   360,
+     365,   373,   375,   377,   379,   381,   386,   391,   396,   401,
+     409,   414,   434,   441,   449,   457,   462,   468,   473,   482,
+     492,   496,   498,   500,   502,   504,   506,   508,   510,   512,
+     514,   516,   518,   520,   522,   524,   526,   528,   530,   532,
+     534,   536,   540,   542,   544,   546,   548,   550,   554,   554,
+     557,   558,   563,   564,   569,   607,   608,   614,   615
 };
 #endif
 
@@ -926,7 +944,7 @@ while (YYID (0))
    we won't break user code: when these are the locations we know.  */
 
 #ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
+# if defined(YYLTYPE_IS_TRIVIAL) && YYLTYPE_IS_TRIVIAL
 #  define YY_LOCATION_PRINT(File, Loc)                 \
      fprintf (File, "%d.%d-%d.%d",                     \
              (Loc).first_line, (Loc).first_column,     \
@@ -1673,7 +1691,7 @@ yyreduce:
   switch (yyn)
     {
         case 4:
-#line 267 "getdate.y"
+#line 287 "getdate.y"
     {
        pc->seconds = (yyvsp[(2) - (2)].timespec);
        pc->timespec_seen = true;
@@ -1681,37 +1699,37 @@ yyreduce:
     break;
 
   case 7:
-#line 280 "getdate.y"
+#line 300 "getdate.y"
     { pc->times_seen++; ;}
     break;
 
   case 8:
-#line 282 "getdate.y"
+#line 302 "getdate.y"
     { pc->local_zones_seen++; ;}
     break;
 
   case 9:
-#line 284 "getdate.y"
+#line 304 "getdate.y"
     { pc->zones_seen++; ;}
     break;
 
   case 10:
-#line 286 "getdate.y"
+#line 306 "getdate.y"
     { pc->dates_seen++; ;}
     break;
 
   case 11:
-#line 288 "getdate.y"
+#line 308 "getdate.y"
     { pc->days_seen++; ;}
     break;
 
   case 12:
-#line 290 "getdate.y"
+#line 310 "getdate.y"
     { pc->rels_seen = true; ;}
     break;
 
   case 14:
-#line 296 "getdate.y"
+#line 316 "getdate.y"
     {
        pc->hour = (yyvsp[(1) - (2)].textintval).value;
        pc->minutes = 0;
@@ -1722,7 +1740,7 @@ yyreduce:
     break;
 
   case 15:
-#line 304 "getdate.y"
+#line 324 "getdate.y"
     {
        pc->hour = (yyvsp[(1) - (4)].textintval).value;
        pc->minutes = (yyvsp[(3) - (4)].textintval).value;
@@ -1733,7 +1751,7 @@ yyreduce:
     break;
 
   case 16:
-#line 312 "getdate.y"
+#line 332 "getdate.y"
     {
        pc->hour = (yyvsp[(1) - (5)].textintval).value;
        pc->minutes = (yyvsp[(3) - (5)].textintval).value;
@@ -1746,7 +1764,7 @@ yyreduce:
     break;
 
   case 17:
-#line 322 "getdate.y"
+#line 342 "getdate.y"
     {
        pc->hour = (yyvsp[(1) - (6)].textintval).value;
        pc->minutes = (yyvsp[(3) - (6)].textintval).value;
@@ -1756,7 +1774,7 @@ yyreduce:
     break;
 
   case 18:
-#line 329 "getdate.y"
+#line 349 "getdate.y"
     {
        pc->hour = (yyvsp[(1) - (7)].textintval).value;
        pc->minutes = (yyvsp[(3) - (7)].textintval).value;
@@ -1768,7 +1786,7 @@ yyreduce:
     break;
 
   case 19:
-#line 341 "getdate.y"
+#line 361 "getdate.y"
     {
        pc->local_isdst = (yyvsp[(1) - (1)].intval);
        pc->dsts_seen += (0 < (yyvsp[(1) - (1)].intval));
@@ -1776,7 +1794,7 @@ yyreduce:
     break;
 
   case 20:
-#line 346 "getdate.y"
+#line 366 "getdate.y"
     {
        pc->local_isdst = 1;
        pc->dsts_seen += (0 < (yyvsp[(1) - (2)].intval)) + 1;
@@ -1784,32 +1802,32 @@ yyreduce:
     break;
 
   case 21:
-#line 354 "getdate.y"
+#line 374 "getdate.y"
     { pc->time_zone = (yyvsp[(1) - (1)].intval); ;}
     break;
 
   case 22:
-#line 356 "getdate.y"
+#line 376 "getdate.y"
     { pc->time_zone = (yyvsp[(1) - (2)].intval); pc->rels_seen = true; ;}
     break;
 
   case 23:
-#line 358 "getdate.y"
+#line 378 "getdate.y"
     { pc->time_zone = (yyvsp[(1) - (3)].intval) + time_zone_hhmm ((yyvsp[(2) - (3)].textintval), (yyvsp[(3) - (3)].intval)); ;}
     break;
 
   case 24:
-#line 360 "getdate.y"
+#line 380 "getdate.y"
     { pc->time_zone = (yyvsp[(1) - (1)].intval) + 60; ;}
     break;
 
   case 25:
-#line 362 "getdate.y"
+#line 382 "getdate.y"
     { pc->time_zone = (yyvsp[(1) - (2)].intval) + 60; ;}
     break;
 
   case 26:
-#line 367 "getdate.y"
+#line 387 "getdate.y"
     {
        pc->day_ordinal = 1;
        pc->day_number = (yyvsp[(1) - (1)].intval);
@@ -1817,7 +1835,7 @@ yyreduce:
     break;
 
   case 27:
-#line 372 "getdate.y"
+#line 392 "getdate.y"
     {
        pc->day_ordinal = 1;
        pc->day_number = (yyvsp[(1) - (2)].intval);
@@ -1825,7 +1843,7 @@ yyreduce:
     break;
 
   case 28:
-#line 377 "getdate.y"
+#line 397 "getdate.y"
     {
        pc->day_ordinal = (yyvsp[(1) - (2)].intval);
        pc->day_number = (yyvsp[(2) - (2)].intval);
@@ -1833,7 +1851,7 @@ yyreduce:
     break;
 
   case 29:
-#line 382 "getdate.y"
+#line 402 "getdate.y"
     {
        pc->day_ordinal = (yyvsp[(1) - (2)].textintval).value;
        pc->day_number = (yyvsp[(2) - (2)].intval);
@@ -1841,7 +1859,7 @@ yyreduce:
     break;
 
   case 30:
-#line 390 "getdate.y"
+#line 410 "getdate.y"
     {
        pc->month = (yyvsp[(1) - (3)].textintval).value;
        pc->day = (yyvsp[(3) - (3)].textintval).value;
@@ -1849,7 +1867,7 @@ yyreduce:
     break;
 
   case 31:
-#line 395 "getdate.y"
+#line 415 "getdate.y"
     {
        /* Interpret as YYYY/MM/DD if the first value has 4 or more digits,
           otherwise as MM/DD/YY.
@@ -1872,7 +1890,7 @@ yyreduce:
     break;
 
   case 32:
-#line 415 "getdate.y"
+#line 435 "getdate.y"
     {
        /* ISO 8601 format.  YYYY-MM-DD.  */
        pc->year = (yyvsp[(1) - (3)].textintval);
@@ -1882,7 +1900,7 @@ yyreduce:
     break;
 
   case 33:
-#line 422 "getdate.y"
+#line 442 "getdate.y"
     {
        /* e.g. 17-JUN-1992.  */
        pc->day = (yyvsp[(1) - (3)].textintval).value;
@@ -1893,7 +1911,7 @@ yyreduce:
     break;
 
   case 34:
-#line 430 "getdate.y"
+#line 450 "getdate.y"
     {
        /* e.g. JUN-17-1992.  */
        pc->month = (yyvsp[(1) - (3)].intval);
@@ -1904,7 +1922,7 @@ yyreduce:
     break;
 
   case 35:
-#line 438 "getdate.y"
+#line 458 "getdate.y"
     {
        pc->month = (yyvsp[(1) - (2)].intval);
        pc->day = (yyvsp[(2) - (2)].textintval).value;
@@ -1912,7 +1930,7 @@ yyreduce:
     break;
 
   case 36:
-#line 443 "getdate.y"
+#line 463 "getdate.y"
     {
        pc->month = (yyvsp[(1) - (4)].intval);
        pc->day = (yyvsp[(2) - (4)].textintval).value;
@@ -1921,7 +1939,7 @@ yyreduce:
     break;
 
   case 37:
-#line 449 "getdate.y"
+#line 469 "getdate.y"
     {
        pc->day = (yyvsp[(1) - (2)].textintval).value;
        pc->month = (yyvsp[(2) - (2)].intval);
@@ -1929,7 +1947,7 @@ yyreduce:
     break;
 
   case 38:
-#line 454 "getdate.y"
+#line 474 "getdate.y"
     {
        pc->day = (yyvsp[(1) - (3)].textintval).value;
        pc->month = (yyvsp[(2) - (3)].intval);
@@ -1938,7 +1956,7 @@ yyreduce:
     break;
 
   case 39:
-#line 463 "getdate.y"
+#line 483 "getdate.y"
     {
        pc->rel_ns = -pc->rel_ns;
        pc->rel_seconds = -pc->rel_seconds;
@@ -1951,147 +1969,147 @@ yyreduce:
     break;
 
   case 41:
-#line 477 "getdate.y"
+#line 497 "getdate.y"
     { pc->rel_year += (yyvsp[(1) - (2)].intval) * (yyvsp[(2) - (2)].intval); ;}
     break;
 
   case 42:
-#line 479 "getdate.y"
+#line 499 "getdate.y"
     { pc->rel_year += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
     break;
 
   case 43:
-#line 481 "getdate.y"
+#line 501 "getdate.y"
     { pc->rel_year += (yyvsp[(1) - (1)].intval); ;}
     break;
 
   case 44:
-#line 483 "getdate.y"
+#line 503 "getdate.y"
     { pc->rel_month += (yyvsp[(1) - (2)].intval) * (yyvsp[(2) - (2)].intval); ;}
     break;
 
   case 45:
-#line 485 "getdate.y"
+#line 505 "getdate.y"
     { pc->rel_month += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
     break;
 
   case 46:
-#line 487 "getdate.y"
+#line 507 "getdate.y"
     { pc->rel_month += (yyvsp[(1) - (1)].intval); ;}
     break;
 
   case 47:
-#line 489 "getdate.y"
+#line 509 "getdate.y"
     { pc->rel_day += (yyvsp[(1) - (2)].intval) * (yyvsp[(2) - (2)].intval); ;}
     break;
 
   case 48:
-#line 491 "getdate.y"
+#line 511 "getdate.y"
     { pc->rel_day += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
     break;
 
   case 49:
-#line 493 "getdate.y"
+#line 513 "getdate.y"
     { pc->rel_day += (yyvsp[(1) - (1)].intval); ;}
     break;
 
   case 50:
-#line 495 "getdate.y"
+#line 515 "getdate.y"
     { pc->rel_hour += (yyvsp[(1) - (2)].intval) * (yyvsp[(2) - (2)].intval); ;}
     break;
 
   case 51:
-#line 497 "getdate.y"
+#line 517 "getdate.y"
     { pc->rel_hour += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
     break;
 
   case 52:
-#line 499 "getdate.y"
+#line 519 "getdate.y"
     { pc->rel_hour += (yyvsp[(1) - (1)].intval); ;}
     break;
 
   case 53:
-#line 501 "getdate.y"
+#line 521 "getdate.y"
     { pc->rel_minutes += (yyvsp[(1) - (2)].intval) * (yyvsp[(2) - (2)].intval); ;}
     break;
 
   case 54:
-#line 503 "getdate.y"
+#line 523 "getdate.y"
     { pc->rel_minutes += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
     break;
 
   case 55:
-#line 505 "getdate.y"
+#line 525 "getdate.y"
     { pc->rel_minutes += (yyvsp[(1) - (1)].intval); ;}
     break;
 
   case 56:
-#line 507 "getdate.y"
+#line 527 "getdate.y"
     { pc->rel_seconds += (yyvsp[(1) - (2)].intval) * (yyvsp[(2) - (2)].intval); ;}
     break;
 
   case 57:
-#line 509 "getdate.y"
+#line 529 "getdate.y"
     { pc->rel_seconds += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
     break;
 
   case 58:
-#line 511 "getdate.y"
+#line 531 "getdate.y"
     { pc->rel_seconds += (yyvsp[(1) - (2)].timespec).tv_sec * (yyvsp[(2) - (2)].intval); pc->rel_ns += (yyvsp[(1) - (2)].timespec).tv_nsec * (yyvsp[(2) - (2)].intval); ;}
     break;
 
   case 59:
-#line 513 "getdate.y"
+#line 533 "getdate.y"
     { pc->rel_seconds += (yyvsp[(1) - (2)].timespec).tv_sec * (yyvsp[(2) - (2)].intval); pc->rel_ns += (yyvsp[(1) - (2)].timespec).tv_nsec * (yyvsp[(2) - (2)].intval); ;}
     break;
 
   case 60:
-#line 515 "getdate.y"
+#line 535 "getdate.y"
     { pc->rel_seconds += (yyvsp[(1) - (1)].intval); ;}
     break;
 
   case 62:
-#line 521 "getdate.y"
+#line 541 "getdate.y"
     { pc->rel_year += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
     break;
 
   case 63:
-#line 523 "getdate.y"
+#line 543 "getdate.y"
     { pc->rel_month += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
     break;
 
   case 64:
-#line 525 "getdate.y"
+#line 545 "getdate.y"
     { pc->rel_day += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
     break;
 
   case 65:
-#line 527 "getdate.y"
+#line 547 "getdate.y"
     { pc->rel_hour += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
     break;
 
   case 66:
-#line 529 "getdate.y"
+#line 549 "getdate.y"
     { pc->rel_minutes += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
     break;
 
   case 67:
-#line 531 "getdate.y"
+#line 551 "getdate.y"
     { pc->rel_seconds += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
     break;
 
   case 71:
-#line 539 "getdate.y"
+#line 559 "getdate.y"
     { (yyval.timespec).tv_sec = (yyvsp[(1) - (1)].textintval).value; (yyval.timespec).tv_nsec = 0; ;}
     break;
 
   case 73:
-#line 545 "getdate.y"
+#line 565 "getdate.y"
     { (yyval.timespec).tv_sec = (yyvsp[(1) - (1)].textintval).value; (yyval.timespec).tv_nsec = 0; ;}
     break;
 
   case 74:
-#line 550 "getdate.y"
+#line 570 "getdate.y"
     {
        if (pc->dates_seen && ! pc->year.digits
            && ! pc->rels_seen && (pc->times_seen || 2 < (yyvsp[(1) - (1)].textintval).digits))
@@ -2128,28 +2146,28 @@ yyreduce:
     break;
 
   case 75:
-#line 587 "getdate.y"
+#line 607 "getdate.y"
     { (yyval.intval) = -1; ;}
     break;
 
   case 76:
-#line 589 "getdate.y"
+#line 609 "getdate.y"
     { (yyval.intval) = (yyvsp[(2) - (2)].textintval).value; ;}
     break;
 
   case 77:
-#line 594 "getdate.y"
+#line 614 "getdate.y"
     { (yyval.intval) = MER24; ;}
     break;
 
   case 78:
-#line 596 "getdate.y"
+#line 616 "getdate.y"
     { (yyval.intval) = (yyvsp[(1) - (1)].intval); ;}
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 2151 "getdate.c"
+#line 2171 "getdate.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -2363,7 +2381,7 @@ yyreturn:
 }
 
 
-#line 599 "getdate.y"
+#line 619 "getdate.y"
 
 
 static table const meridian_table[] =
@@ -2880,7 +2898,7 @@ yylex (YYSTYPE *lvalp, parser_control *pc)
 
 /* Do nothing if the parser reports an error.  */
 static int
-yyerror (parser_control *pc ATTRIBUTE_UNUSED, char *s ATTRIBUTE_UNUSED)
+yyerror (parser_control *pc ATTRIBUTE_UNUSED, const char *s ATTRIBUTE_UNUSED)
 {
   return 0;
 }
@@ -2923,9 +2941,9 @@ get_tz (char tzbuf[TZBUFSIZE])
   if (tz)
     {
       size_t tzsize = strlen (tz) + 1;
-      tz = (tzsize <= TZBUFSIZE
+      tz = (tzsize == 1 ? NULL : (tzsize <= TZBUFSIZE
            ? memcpy (tzbuf, tz, tzsize)
-           : xmemdup (tz, tzsize));
+           : xmemdup (tz, tzsize)));
     }
   return tz;
 }