|
Ondrej Vasik |
3a1add |
diff -urNp coreutils-6.12-orig/lib/getdate.y coreutils-6.12/lib/getdate.y
|
|
Ondrej Vasik |
3a1add |
--- coreutils-6.12-orig/lib/getdate.y 2008-01-31 19:37:19.000000000 +0100
|
|
Ondrej Vasik |
3a1add |
+++ coreutils-6.12/lib/getdate.y 2008-10-08 15:49:35.000000000 +0200
|
|
Ondrej Vasik |
3a1add |
@@ -1,8 +1,8 @@
|
|
Ondrej Vasik |
3a1add |
%{
|
|
Ondrej Vasik |
3a1add |
/* Parse a string into an internal time stamp.
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
- Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007 Free Software
|
|
Ondrej Vasik |
3a1add |
- Foundation, Inc.
|
|
Ondrej Vasik |
3a1add |
+ Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008
|
|
Ondrej Vasik |
3a1add |
+ Free Software Foundation, Inc.
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
This program is free software: you can redistribute it and/or modify
|
|
Ondrej Vasik |
3a1add |
it under the terms of the GNU General Public License as published by
|
|
Ondrej Vasik |
3a1add |
@@ -60,7 +60,7 @@
|
|
Ondrej Vasik |
3a1add |
# undef static
|
|
Ondrej Vasik |
3a1add |
#endif
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
-#include <ctype.h>
|
|
Ondrej Vasik |
3a1add |
+#include <c-ctype.h>
|
|
Ondrej Vasik |
3a1add |
#include <limits.h>
|
|
Ondrej Vasik |
3a1add |
#include <stdio.h>
|
|
Ondrej Vasik |
3a1add |
#include <stdlib.h>
|
|
Ondrej Vasik |
3a1add |
@@ -205,7 +205,7 @@ typedef struct
|
|
Ondrej Vasik |
3a1add |
union YYSTYPE;
|
|
Ondrej Vasik |
3a1add |
static int yylex (union YYSTYPE *, parser_control *);
|
|
Ondrej Vasik |
3a1add |
static int yyerror (parser_control const *, char const *);
|
|
Ondrej Vasik |
3a1add |
-static long int time_zone_hhmm (textint, long int);
|
|
Ondrej Vasik |
3a1add |
+static long int time_zone_hhmm (parser_control *, textint, long int);
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
/* Extract into *PC any date and time info from a string of digits
|
|
Ondrej Vasik |
3a1add |
of the form e.g., YYYYMMDD, YYMMDD, HHMM, HH (and sometimes YYY,
|
|
Ondrej Vasik |
3a1add |
@@ -246,6 +246,31 @@ digits_to_date_time (parser_control *pc,
|
|
Ondrej Vasik |
3a1add |
}
|
|
Ondrej Vasik |
3a1add |
}
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
+/* Increment PC->rel by FACTOR * REL (FACTOR is 1 or -1). */
|
|
Ondrej Vasik |
3a1add |
+static void
|
|
Ondrej Vasik |
3a1add |
+apply_relative_time (parser_control *pc, relative_time rel, int factor)
|
|
Ondrej Vasik |
3a1add |
+{
|
|
Ondrej Vasik |
3a1add |
+ pc->rel.ns += factor * rel.ns;
|
|
Ondrej Vasik |
3a1add |
+ pc->rel.seconds += factor * rel.seconds;
|
|
Ondrej Vasik |
3a1add |
+ pc->rel.minutes += factor * rel.minutes;
|
|
Ondrej Vasik |
3a1add |
+ pc->rel.hour += factor * rel.hour;
|
|
Ondrej Vasik |
3a1add |
+ pc->rel.day += factor * rel.day;
|
|
Ondrej Vasik |
3a1add |
+ pc->rel.month += factor * rel.month;
|
|
Ondrej Vasik |
3a1add |
+ pc->rel.year += factor * rel.year;
|
|
Ondrej Vasik |
3a1add |
+ pc->rels_seen = true;
|
|
Ondrej Vasik |
3a1add |
+}
|
|
Ondrej Vasik |
3a1add |
+
|
|
Ondrej Vasik |
3a1add |
+/* Set PC-> hour, minutes, seconds and nanoseconds members from arguments. */
|
|
Ondrej Vasik |
3a1add |
+static void
|
|
Ondrej Vasik |
3a1add |
+set_hhmmss (parser_control *pc, long int hour, long int minutes,
|
|
Ondrej Vasik |
3a1add |
+ time_t sec, long int nsec)
|
|
Ondrej Vasik |
3a1add |
+{
|
|
Ondrej Vasik |
3a1add |
+ pc->hour = hour;
|
|
Ondrej Vasik |
3a1add |
+ pc->minutes = minutes;
|
|
Ondrej Vasik |
3a1add |
+ pc->seconds.tv_sec = sec;
|
|
Ondrej Vasik |
3a1add |
+ pc->seconds.tv_nsec = nsec;
|
|
Ondrej Vasik |
3a1add |
+}
|
|
Ondrej Vasik |
3a1add |
+
|
|
Ondrej Vasik |
3a1add |
%}
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
/* We want a reentrant parser, even if the TZ manipulation and the calls to
|
|
Ondrej Vasik |
3a1add |
@@ -268,7 +293,7 @@ digits_to_date_time (parser_control *pc,
|
|
Ondrej Vasik |
3a1add |
%token tAGO tDST
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
%token tYEAR_UNIT tMONTH_UNIT tHOUR_UNIT tMINUTE_UNIT tSEC_UNIT
|
|
Ondrej Vasik |
3a1add |
-%token <intval> tDAY_UNIT
|
|
Ondrej Vasik |
3a1add |
+%token <intval> tDAY_UNIT tDAY_SHIFT
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
%token <intval> tDAY tDAYZONE tLOCAL_ZONE tMERIDIAN
|
|
Ondrej Vasik |
3a1add |
%token <intval> tMONTH tORDINAL tZONE
|
|
Ondrej Vasik |
3a1add |
@@ -279,7 +304,7 @@ digits_to_date_time (parser_control *pc,
|
|
Ondrej Vasik |
3a1add |
%type <intval> o_colon_minutes o_merid
|
|
Ondrej Vasik |
3a1add |
%type <timespec> seconds signed_seconds unsigned_seconds
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
-%type <rel> relunit relunit_snumber
|
|
Ondrej Vasik |
3a1add |
+%type <rel> relunit relunit_snumber dayshift
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
%%
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
@@ -313,7 +338,6 @@ item:
|
|
Ondrej Vasik |
3a1add |
| day
|
|
Ondrej Vasik |
3a1add |
{ pc->days_seen++; }
|
|
Ondrej Vasik |
3a1add |
| rel
|
|
Ondrej Vasik |
3a1add |
- { pc->rels_seen = true; }
|
|
Ondrej Vasik |
3a1add |
| number
|
|
Ondrej Vasik |
3a1add |
| hybrid
|
|
Ondrej Vasik |
3a1add |
;
|
|
Ondrej Vasik |
3a1add |
@@ -321,45 +345,32 @@ item:
|
|
Ondrej Vasik |
3a1add |
time:
|
|
Ondrej Vasik |
3a1add |
tUNUMBER tMERIDIAN
|
|
Ondrej Vasik |
3a1add |
{
|
|
Ondrej Vasik |
3a1add |
- pc->hour = $1.value;
|
|
Ondrej Vasik |
3a1add |
- pc->minutes = 0;
|
|
Ondrej Vasik |
3a1add |
- pc->seconds.tv_sec = 0;
|
|
Ondrej Vasik |
3a1add |
- pc->seconds.tv_nsec = 0;
|
|
Ondrej Vasik |
3a1add |
+ set_hhmmss (pc, $1.value, 0, 0, 0);
|
|
Ondrej Vasik |
3a1add |
pc->meridian = $2;
|
|
Ondrej Vasik |
3a1add |
}
|
|
Ondrej Vasik |
3a1add |
| tUNUMBER ':' tUNUMBER o_merid
|
|
Ondrej Vasik |
3a1add |
{
|
|
Ondrej Vasik |
3a1add |
- pc->hour = $1.value;
|
|
Ondrej Vasik |
3a1add |
- pc->minutes = $3.value;
|
|
Ondrej Vasik |
3a1add |
- pc->seconds.tv_sec = 0;
|
|
Ondrej Vasik |
3a1add |
- pc->seconds.tv_nsec = 0;
|
|
Ondrej Vasik |
3a1add |
+ set_hhmmss (pc, $1.value, $3.value, 0, 0);
|
|
Ondrej Vasik |
3a1add |
pc->meridian = $4;
|
|
Ondrej Vasik |
3a1add |
}
|
|
Ondrej Vasik |
3a1add |
| tUNUMBER ':' tUNUMBER tSNUMBER o_colon_minutes
|
|
Ondrej Vasik |
3a1add |
{
|
|
Ondrej Vasik |
3a1add |
- pc->hour = $1.value;
|
|
Ondrej Vasik |
3a1add |
- pc->minutes = $3.value;
|
|
Ondrej Vasik |
3a1add |
- pc->seconds.tv_sec = 0;
|
|
Ondrej Vasik |
3a1add |
- pc->seconds.tv_nsec = 0;
|
|
Ondrej Vasik |
3a1add |
+ set_hhmmss (pc, $1.value, $3.value, 0, 0);
|
|
Ondrej Vasik |
3a1add |
pc->meridian = MER24;
|
|
Ondrej Vasik |
3a1add |
pc->zones_seen++;
|
|
Ondrej Vasik |
3a1add |
- pc->time_zone = time_zone_hhmm ($4, $5);
|
|
Ondrej Vasik |
3a1add |
+ pc->time_zone = time_zone_hhmm (pc, $4, $5);
|
|
Ondrej Vasik |
3a1add |
}
|
|
Ondrej Vasik |
3a1add |
| tUNUMBER ':' tUNUMBER ':' unsigned_seconds o_merid
|
|
Ondrej Vasik |
3a1add |
{
|
|
Ondrej Vasik |
3a1add |
- pc->hour = $1.value;
|
|
Ondrej Vasik |
3a1add |
- pc->minutes = $3.value;
|
|
Ondrej Vasik |
3a1add |
- pc->seconds = $5;
|
|
Ondrej Vasik |
3a1add |
+ set_hhmmss (pc, $1.value, $3.value, $5.tv_sec, $5.tv_nsec);
|
|
Ondrej Vasik |
3a1add |
pc->meridian = $6;
|
|
Ondrej Vasik |
3a1add |
}
|
|
Ondrej Vasik |
3a1add |
| tUNUMBER ':' tUNUMBER ':' unsigned_seconds tSNUMBER o_colon_minutes
|
|
Ondrej Vasik |
3a1add |
{
|
|
Ondrej Vasik |
3a1add |
- pc->hour = $1.value;
|
|
Ondrej Vasik |
3a1add |
- pc->minutes = $3.value;
|
|
Ondrej Vasik |
3a1add |
- pc->seconds = $5;
|
|
Ondrej Vasik |
3a1add |
+ set_hhmmss (pc, $1.value, $3.value, $5.tv_sec, $5.tv_nsec);
|
|
Ondrej Vasik |
3a1add |
pc->meridian = MER24;
|
|
Ondrej Vasik |
3a1add |
pc->zones_seen++;
|
|
Ondrej Vasik |
3a1add |
- pc->time_zone = time_zone_hhmm ($6, $7);
|
|
Ondrej Vasik |
3a1add |
+ pc->time_zone = time_zone_hhmm (pc, $6, $7);
|
|
Ondrej Vasik |
3a1add |
}
|
|
Ondrej Vasik |
3a1add |
;
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
@@ -381,16 +392,9 @@ zone:
|
|
Ondrej Vasik |
3a1add |
{ pc->time_zone = $1; }
|
|
Ondrej Vasik |
3a1add |
| tZONE relunit_snumber
|
|
Ondrej Vasik |
3a1add |
{ pc->time_zone = $1;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.ns += $2.ns;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.seconds += $2.seconds;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.minutes += $2.minutes;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.hour += $2.hour;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.day += $2.day;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.month += $2.month;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.year += $2.year;
|
|
Ondrej Vasik |
3a1add |
- pc->rels_seen = true; }
|
|
Ondrej Vasik |
3a1add |
+ apply_relative_time (pc, $2, 1); }
|
|
Ondrej Vasik |
3a1add |
| tZONE tSNUMBER o_colon_minutes
|
|
Ondrej Vasik |
3a1add |
- { pc->time_zone = $1 + time_zone_hhmm ($2, $3); }
|
|
Ondrej Vasik |
3a1add |
+ { pc->time_zone = $1 + time_zone_hhmm (pc, $2, $3); }
|
|
Ondrej Vasik |
3a1add |
| tDAYZONE
|
|
Ondrej Vasik |
3a1add |
{ pc->time_zone = $1 + 60; }
|
|
Ondrej Vasik |
3a1add |
| tZONE tDST
|
|
Ondrej Vasik |
3a1add |
@@ -495,25 +499,11 @@ date:
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
rel:
|
|
Ondrej Vasik |
3a1add |
relunit tAGO
|
|
Ondrej Vasik |
3a1add |
- {
|
|
Ondrej Vasik |
3a1add |
- pc->rel.ns -= $1.ns;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.seconds -= $1.seconds;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.minutes -= $1.minutes;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.hour -= $1.hour;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.day -= $1.day;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.month -= $1.month;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.year -= $1.year;
|
|
Ondrej Vasik |
3a1add |
- }
|
|
Ondrej Vasik |
3a1add |
+ { apply_relative_time (pc, $1, -1); }
|
|
Ondrej Vasik |
3a1add |
| relunit
|
|
Ondrej Vasik |
3a1add |
- {
|
|
Ondrej Vasik |
3a1add |
- pc->rel.ns += $1.ns;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.seconds += $1.seconds;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.minutes += $1.minutes;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.hour += $1.hour;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.day += $1.day;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.month += $1.month;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.year += $1.year;
|
|
Ondrej Vasik |
3a1add |
- }
|
|
Ondrej Vasik |
3a1add |
+ { apply_relative_time (pc, $1, 1); }
|
|
Ondrej Vasik |
3a1add |
+ | dayshift
|
|
Ondrej Vasik |
3a1add |
+ { apply_relative_time (pc, $1, 1); }
|
|
Ondrej Vasik |
3a1add |
;
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
relunit:
|
|
Ondrej Vasik |
3a1add |
@@ -575,6 +565,11 @@ relunit_snumber:
|
|
Ondrej Vasik |
3a1add |
{ $$ = RELATIVE_TIME_0; $$.seconds = $1.value; }
|
|
Ondrej Vasik |
3a1add |
;
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
+dayshift:
|
|
Ondrej Vasik |
3a1add |
+ tDAY_SHIFT
|
|
Ondrej Vasik |
3a1add |
+ { $$ = RELATIVE_TIME_0; $$.day = $1; }
|
|
Ondrej Vasik |
3a1add |
+ ;
|
|
Ondrej Vasik |
3a1add |
+
|
|
Ondrej Vasik |
3a1add |
seconds: signed_seconds | unsigned_seconds;
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
signed_seconds:
|
|
Ondrej Vasik |
3a1add |
@@ -600,14 +595,7 @@ hybrid:
|
|
Ondrej Vasik |
3a1add |
/* Hybrid all-digit and relative offset, so that we accept e.g.,
|
|
Ondrej Vasik |
3a1add |
"YYYYMMDD +N days" as well as "YYYYMMDD N days". */
|
|
Ondrej Vasik |
3a1add |
digits_to_date_time (pc, $1);
|
|
Ondrej Vasik |
3a1add |
- pc->rel.ns += $2.ns;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.seconds += $2.seconds;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.minutes += $2.minutes;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.hour += $2.hour;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.day += $2.day;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.month += $2.month;
|
|
Ondrej Vasik |
3a1add |
- pc->rel.year += $2.year;
|
|
Ondrej Vasik |
3a1add |
- pc->rels_seen = true;
|
|
Ondrej Vasik |
3a1add |
+ apply_relative_time (pc, $2, 1);
|
|
Ondrej Vasik |
3a1add |
}
|
|
Ondrej Vasik |
3a1add |
;
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
@@ -688,10 +676,10 @@ static table const time_units_table[] =
|
|
Ondrej Vasik |
3a1add |
/* Assorted relative-time words. */
|
|
Ondrej Vasik |
3a1add |
static table const relative_time_table[] =
|
|
Ondrej Vasik |
3a1add |
{
|
|
Ondrej Vasik |
3a1add |
- { "TOMORROW", tDAY_UNIT, 1 },
|
|
Ondrej Vasik |
3a1add |
- { "YESTERDAY",tDAY_UNIT, -1 },
|
|
Ondrej Vasik |
3a1add |
- { "TODAY", tDAY_UNIT, 0 },
|
|
Ondrej Vasik |
3a1add |
- { "NOW", tDAY_UNIT, 0 },
|
|
Ondrej Vasik |
3a1add |
+ { "TOMORROW", tDAY_SHIFT, 1 },
|
|
Ondrej Vasik |
3a1add |
+ { "YESTERDAY",tDAY_SHIFT, -1 },
|
|
Ondrej Vasik |
3a1add |
+ { "TODAY", tDAY_SHIFT, 0 },
|
|
Ondrej Vasik |
3a1add |
+ { "NOW", tDAY_SHIFT, 0 },
|
|
Ondrej Vasik |
3a1add |
{ "LAST", tORDINAL, -1 },
|
|
Ondrej Vasik |
3a1add |
{ "THIS", tORDINAL, 0 },
|
|
Ondrej Vasik |
3a1add |
{ "NEXT", tORDINAL, 1 },
|
|
Ondrej Vasik |
3a1add |
@@ -814,15 +802,33 @@ static table const military_table[] =
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
/* Convert a time zone expressed as HH:MM into an integer count of
|
|
Ondrej Vasik |
3a1add |
minutes. If MM is negative, then S is of the form HHMM and needs
|
|
Ondrej Vasik |
3a1add |
- to be picked apart; otherwise, S is of the form HH. */
|
|
Ondrej Vasik |
3a1add |
+ to be picked apart; otherwise, S is of the form HH. As specified in
|
|
Ondrej Vasik |
3a1add |
+ http://www.opengroup.org/susv3xbd/xbd_chap08.html#tag_08_03, allow
|
|
Ondrej Vasik |
3a1add |
+ only valid TZ range, and consider first two digits as hours, if no
|
|
Ondrej Vasik |
3a1add |
+ minutes specified. */
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
static long int
|
|
Ondrej Vasik |
3a1add |
-time_zone_hhmm (textint s, long int mm)
|
|
Ondrej Vasik |
3a1add |
+time_zone_hhmm (parser_control *pc, textint s, long int mm)
|
|
Ondrej Vasik |
3a1add |
{
|
|
Ondrej Vasik |
3a1add |
+ long int n_minutes;
|
|
Ondrej Vasik |
3a1add |
+
|
|
Ondrej Vasik |
3a1add |
+ /* If the length of S is 1 or 2 and no minutes are specified,
|
|
Ondrej Vasik |
3a1add |
+ interpret it as a number of hours. */
|
|
Ondrej Vasik |
3a1add |
+ if (s.digits <= 2 && mm < 0)
|
|
Ondrej Vasik |
3a1add |
+ s.value *= 100;
|
|
Ondrej Vasik |
3a1add |
+
|
|
Ondrej Vasik |
3a1add |
if (mm < 0)
|
|
Ondrej Vasik |
3a1add |
- return (s.value / 100) * 60 + s.value % 100;
|
|
Ondrej Vasik |
3a1add |
+ n_minutes = (s.value / 100) * 60 + s.value % 100;
|
|
Ondrej Vasik |
3a1add |
else
|
|
Ondrej Vasik |
3a1add |
- return s.value * 60 + (s.negative ? -mm : mm);
|
|
Ondrej Vasik |
3a1add |
+ n_minutes = s.value * 60 + (s.negative ? -mm : mm);
|
|
Ondrej Vasik |
3a1add |
+
|
|
Ondrej Vasik |
3a1add |
+ /* If the absolute number of minutes is larger than 24 hours,
|
|
Ondrej Vasik |
3a1add |
+ arrange to reject it by incrementing pc->zones_seen. Thus,
|
|
Ondrej Vasik |
3a1add |
+ we allow only values in the range UTC-24:00 to UTC+24:00. */
|
|
Ondrej Vasik |
3a1add |
+ if (24 * 60 < abs (n_minutes))
|
|
Ondrej Vasik |
3a1add |
+ pc->zones_seen++;
|
|
Ondrej Vasik |
3a1add |
+
|
|
Ondrej Vasik |
3a1add |
+ return n_minutes;
|
|
Ondrej Vasik |
3a1add |
}
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
static int
|
|
Ondrej Vasik |
3a1add |
@@ -919,7 +925,7 @@ lookup_word (parser_control const *pc, c
|
|
Ondrej Vasik |
3a1add |
for (p = word; *p; p++)
|
|
Ondrej Vasik |
3a1add |
{
|
|
Ondrej Vasik |
3a1add |
unsigned char ch = *p;
|
|
Ondrej Vasik |
3a1add |
- *p = toupper (ch);
|
|
Ondrej Vasik |
3a1add |
+ *p = c_toupper (ch);
|
|
Ondrej Vasik |
3a1add |
}
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
for (tp = meridian_table; tp->name; tp++)
|
|
Ondrej Vasik |
3a1add |
@@ -984,7 +990,7 @@ yylex (YYSTYPE *lvalp, parser_control *p
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
for (;;)
|
|
Ondrej Vasik |
3a1add |
{
|
|
Ondrej Vasik |
3a1add |
- while (c = *pc->input, isspace (c))
|
|
Ondrej Vasik |
3a1add |
+ while (c = *pc->input, c_isspace (c))
|
|
Ondrej Vasik |
3a1add |
pc->input++;
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
if (ISDIGIT (c) || c == '-' || c == '+')
|
|
Ondrej Vasik |
3a1add |
@@ -995,7 +1001,7 @@ yylex (YYSTYPE *lvalp, parser_control *p
|
|
Ondrej Vasik |
3a1add |
if (c == '-' || c == '+')
|
|
Ondrej Vasik |
3a1add |
{
|
|
Ondrej Vasik |
3a1add |
sign = c == '-' ? -1 : 1;
|
|
Ondrej Vasik |
3a1add |
- while (c = *++pc->input, isspace (c))
|
|
Ondrej Vasik |
3a1add |
+ while (c = *++pc->input, c_isspace (c))
|
|
Ondrej Vasik |
3a1add |
continue;
|
|
Ondrej Vasik |
3a1add |
if (! ISDIGIT (c))
|
|
Ondrej Vasik |
3a1add |
/* skip the '-' sign */
|
|
Ondrej Vasik |
3a1add |
@@ -1099,7 +1105,7 @@ yylex (YYSTYPE *lvalp, parser_control *p
|
|
Ondrej Vasik |
3a1add |
}
|
|
Ondrej Vasik |
3a1add |
}
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
- if (isalpha (c))
|
|
Ondrej Vasik |
3a1add |
+ if (c_isalpha (c))
|
|
Ondrej Vasik |
3a1add |
{
|
|
Ondrej Vasik |
3a1add |
char buff[20];
|
|
Ondrej Vasik |
3a1add |
char *p = buff;
|
|
Ondrej Vasik |
3a1add |
@@ -1111,7 +1117,7 @@ yylex (YYSTYPE *lvalp, parser_control *p
|
|
Ondrej Vasik |
3a1add |
*p++ = c;
|
|
Ondrej Vasik |
3a1add |
c = *++pc->input;
|
|
Ondrej Vasik |
3a1add |
}
|
|
Ondrej Vasik |
3a1add |
- while (isalpha (c) || c == '.');
|
|
Ondrej Vasik |
3a1add |
+ while (c_isalpha (c) || c == '.');
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
*p = '\0';
|
|
Ondrej Vasik |
3a1add |
tp = lookup_word (pc, buff);
|
|
Ondrej Vasik |
3a1add |
@@ -1224,7 +1230,7 @@ get_date (struct timespec *result, char
|
|
Ondrej Vasik |
3a1add |
if (! tmp)
|
|
Ondrej Vasik |
3a1add |
return false;
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
- while (c = *p, isspace (c))
|
|
Ondrej Vasik |
3a1add |
+ while (c = *p, c_isspace (c))
|
|
Ondrej Vasik |
3a1add |
p++;
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
if (strncmp (p, "TZ=\"", 4) == 0)
|
|
Ondrej Vasik |
3a1add |
@@ -1436,25 +1442,6 @@ get_date (struct timespec *result, char
|
|
Ondrej Vasik |
3a1add |
goto fail;
|
|
Ondrej Vasik |
3a1add |
}
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
- if (pc.zones_seen)
|
|
Ondrej Vasik |
3a1add |
- {
|
|
Ondrej Vasik |
3a1add |
- long int delta = pc.time_zone * 60;
|
|
Ondrej Vasik |
3a1add |
- time_t t1;
|
|
Ondrej Vasik |
3a1add |
-#ifdef HAVE_TM_GMTOFF
|
|
Ondrej Vasik |
3a1add |
- delta -= tm.tm_gmtoff;
|
|
Ondrej Vasik |
3a1add |
-#else
|
|
Ondrej Vasik |
3a1add |
- time_t t = Start;
|
|
Ondrej Vasik |
3a1add |
- struct tm const *gmt = gmtime (&t);
|
|
Ondrej Vasik |
3a1add |
- if (! gmt)
|
|
Ondrej Vasik |
3a1add |
- goto fail;
|
|
Ondrej Vasik |
3a1add |
- delta -= tm_diff (&tm, gmt);
|
|
Ondrej Vasik |
3a1add |
-#endif
|
|
Ondrej Vasik |
3a1add |
- t1 = Start - delta;
|
|
Ondrej Vasik |
3a1add |
- if ((Start < t1) != (delta < 0))
|
|
Ondrej Vasik |
3a1add |
- goto fail; /* time_t overflow */
|
|
Ondrej Vasik |
3a1add |
- Start = t1;
|
|
Ondrej Vasik |
3a1add |
- }
|
|
Ondrej Vasik |
3a1add |
-
|
|
Ondrej Vasik |
3a1add |
/* Add relative date. */
|
|
Ondrej Vasik |
3a1add |
if (pc.rel.year | pc.rel.month | pc.rel.day)
|
|
Ondrej Vasik |
3a1add |
{
|
|
Ondrej Vasik |
3a1add |
@@ -1477,6 +1464,27 @@ get_date (struct timespec *result, char
|
|
Ondrej Vasik |
3a1add |
goto fail;
|
|
Ondrej Vasik |
3a1add |
}
|
|
Ondrej Vasik |
3a1add |
|
|
Ondrej Vasik |
3a1add |
+ /* The only "output" of this if-block is an updated Start value,
|
|
Ondrej Vasik |
3a1add |
+ so this block must follow others that clobber Start. */
|
|
Ondrej Vasik |
3a1add |
+ if (pc.zones_seen)
|
|
Ondrej Vasik |
3a1add |
+ {
|
|
Ondrej Vasik |
3a1add |
+ long int delta = pc.time_zone * 60;
|
|
Ondrej Vasik |
3a1add |
+ time_t t1;
|
|
Ondrej Vasik |
3a1add |
+#ifdef HAVE_TM_GMTOFF
|
|
Ondrej Vasik |
3a1add |
+ delta -= tm.tm_gmtoff;
|
|
Ondrej Vasik |
3a1add |
+#else
|
|
Ondrej Vasik |
3a1add |
+ time_t t = Start;
|
|
Ondrej Vasik |
3a1add |
+ struct tm const *gmt = gmtime (&t);
|
|
Ondrej Vasik |
3a1add |
+ if (! gmt)
|
|
Ondrej Vasik |
3a1add |
+ goto fail;
|
|
Ondrej Vasik |
3a1add |
+ delta -= tm_diff (&tm, gmt);
|
|
Ondrej Vasik |
3a1add |
+#endif
|
|
Ondrej Vasik |
3a1add |
+ t1 = Start - delta;
|
|
Ondrej Vasik |
3a1add |
+ if ((Start < t1) != (delta < 0))
|
|
Ondrej Vasik |
3a1add |
+ goto fail; /* time_t overflow */
|
|
Ondrej Vasik |
3a1add |
+ Start = t1;
|
|
Ondrej Vasik |
3a1add |
+ }
|
|
Ondrej Vasik |
3a1add |
+
|
|
Ondrej Vasik |
3a1add |
/* Add relative hours, minutes, and seconds. On hosts that support
|
|
Ondrej Vasik |
3a1add |
leap seconds, ignore the possibility of leap seconds; e.g.,
|
|
Ondrej Vasik |
3a1add |
"+ 10 minutes" adds 600 seconds, even if one of them is a
|