static int yyerror ();
#define EPOCH 1970
-#define HOUR(x) ((x) * 60)
+#define HOUR(x) ((time_t)(x) * 60)
+#define SECSPERDAY (24L * 60L * 60L)
#define MAX_BUFF_LEN 128 /* size of buffer to read the date into */
yyRelYear += $1 * $2;
}
| tYEAR_UNIT {
- yyRelYear++;
+ yyRelYear += $1;
}
| tUNUMBER tMONTH_UNIT {
yyRelMonth += $1 * $2;
yyRelMonth += $1 * $2;
}
| tMONTH_UNIT {
- yyRelMonth++;
+ yyRelMonth += $1;
}
| tUNUMBER tDAY_UNIT {
yyRelDay += $1 * $2;
yyRelDay += $1 * $2;
}
| tDAY_UNIT {
- yyRelDay++;
+ yyRelDay += $1;
}
| tUNUMBER tHOUR_UNIT {
yyRelHour += $1 * $2;
yyRelHour += $1 * $2;
}
| tHOUR_UNIT {
- yyRelHour++;
+ yyRelHour += $1;
}
| tUNUMBER tMINUTE_UNIT {
yyRelMinutes += $1 * $2;
yyRelMinutes += $1 * $2;
}
| tMINUTE_UNIT {
- yyRelMinutes++;
+ yyRelMinutes += $1;
}
| tUNUMBER tSEC_UNIT {
yyRelSeconds += $1 * $2;
yyRelSeconds += $1 * $2;
}
| tSEC_UNIT {
- yyRelSeconds++;
+ yyRelSeconds += $1;
}
;
{ "now", tMINUTE_UNIT, 0 },
{ "last", tUNUMBER, -1 },
{ "this", tMINUTE_UNIT, 0 },
- { "next", tUNUMBER, 2 },
+ { "next", tUNUMBER, 1 /* Was bogusly 2 [mdw] */ },
{ "first", tUNUMBER, 1 },
/* { "second", tUNUMBER, 2 }, */
{ "third", tUNUMBER, 3 },
#define TM_YEAR_ORIGIN 1900
+#ifndef GETDATE_IGNORE_TIMEZONE
+
/* Yield A - B, measured in seconds. */
static long
difftm (a, b)
+ (a->tm_sec - b->tm_sec));
}
+#endif
+
time_t
get_date (p, now)
const char *p;
zone by 24 hours to compensate. This algorithm assumes that
there is no DST transition within a day of the time_t boundaries. */
+#ifndef GETDATE_IGNORE_TIMEZONE
if (yyHaveZone)
{
tm = tm0;
}
Start = mktime (&tm);
}
+#endif
if (Start == (time_t) -1)
return Start;
return Start;
}
+#ifndef GETDATE_IGNORE_TIMEZONE
if (yyHaveZone)
{
long delta = yyTimezone * 60L + difftm (&tm, gmtime (&Start));
return -1; /* time_t overflow */
Start += delta;
}
+#endif
return Start;
}