mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -05:00
newly generated
This commit is contained in:
parent
ae8375516b
commit
5d3dd7911e
508
lib/getdate.c
508
lib/getdate.c
@ -197,38 +197,40 @@ typedef enum _MERIDIAN {
|
||||
MERam, MERpm, MER24
|
||||
} MERIDIAN;
|
||||
|
||||
/* parse results and input string */
|
||||
typedef struct _CONTEXT {
|
||||
const char *yyInput;
|
||||
int yyDayOrdinal;
|
||||
int yyDayNumber;
|
||||
int yyHaveDate;
|
||||
int yyHaveDay;
|
||||
int yyHaveRel;
|
||||
int yyHaveTime;
|
||||
int yyHaveZone;
|
||||
int yyTimezone;
|
||||
int yyDay;
|
||||
int yyHour;
|
||||
int yyMinutes;
|
||||
int yyMonth;
|
||||
int yySeconds;
|
||||
int yyYear;
|
||||
MERIDIAN yyMeridian;
|
||||
int yyRelDay;
|
||||
int yyRelHour;
|
||||
int yyRelMinutes;
|
||||
int yyRelMonth;
|
||||
int yyRelSeconds;
|
||||
int yyRelYear;
|
||||
} CONTEXT;
|
||||
|
||||
/*
|
||||
** Global variables. We could get rid of most of these by using a good
|
||||
** union as the yacc stack. (This routine was originally written before
|
||||
** yacc had the %union construct.) Maybe someday; right now we only use
|
||||
** the %union very rarely.
|
||||
/* enable use of extra argument to yyparse and yylex which can be used to pass
|
||||
** in a user defined value (CONTEXT struct in our case)
|
||||
*/
|
||||
static const char *yyInput;
|
||||
static int yyDayOrdinal;
|
||||
static int yyDayNumber;
|
||||
static int yyHaveDate;
|
||||
static int yyHaveDay;
|
||||
static int yyHaveRel;
|
||||
static int yyHaveTime;
|
||||
static int yyHaveZone;
|
||||
static int yyTimezone;
|
||||
static int yyDay;
|
||||
static int yyHour;
|
||||
static int yyMinutes;
|
||||
static int yyMonth;
|
||||
static int yySeconds;
|
||||
static int yyYear;
|
||||
static MERIDIAN yyMeridian;
|
||||
static int yyRelDay;
|
||||
static int yyRelHour;
|
||||
static int yyRelMinutes;
|
||||
static int yyRelMonth;
|
||||
static int yyRelSeconds;
|
||||
static int yyRelYear;
|
||||
#define YYPARSE_PARAM cookie
|
||||
#define YYLEX_PARAM cookie
|
||||
#define context ((CONTEXT *) cookie)
|
||||
|
||||
|
||||
#line 211 "getdate.y"
|
||||
#line 218 "getdate.y"
|
||||
typedef union {
|
||||
int Number;
|
||||
enum _MERIDIAN Meridian;
|
||||
@ -311,11 +313,11 @@ static const short yyrhs[] = { -1,
|
||||
|
||||
#if YYDEBUG != 0
|
||||
static const short yyrline[] = { 0,
|
||||
227, 228, 231, 234, 237, 240, 243, 246, 249, 255,
|
||||
261, 270, 276, 288, 291, 294, 300, 304, 308, 314,
|
||||
318, 336, 342, 348, 352, 357, 361, 368, 376, 379,
|
||||
382, 385, 388, 391, 394, 397, 400, 403, 406, 409,
|
||||
412, 415, 418, 421, 424, 427, 430, 435, 468, 472
|
||||
234, 235, 238, 241, 244, 247, 250, 253, 256, 262,
|
||||
268, 277, 283, 295, 298, 301, 307, 311, 315, 321,
|
||||
325, 343, 349, 355, 359, 364, 368, 375, 383, 386,
|
||||
389, 392, 395, 398, 401, 404, 407, 410, 413, 416,
|
||||
419, 422, 425, 428, 431, 434, 437, 442, 476, 480
|
||||
};
|
||||
#endif
|
||||
|
||||
@ -395,6 +397,8 @@ static const short yycheck[] = { 0,
|
||||
11, 15, 13, 14, 16, 19, 17, 16, 21, 0,
|
||||
56
|
||||
};
|
||||
#define YYPURE 1
|
||||
|
||||
/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
|
||||
#line 3 "/usr/local/share/bison.simple"
|
||||
/* This file comes from bison-1.28. */
|
||||
@ -939,135 +943,135 @@ yyreduce:
|
||||
switch (yyn) {
|
||||
|
||||
case 3:
|
||||
#line 231 "getdate.y"
|
||||
#line 238 "getdate.y"
|
||||
{
|
||||
yyHaveTime++;
|
||||
context->yyHaveTime++;
|
||||
;
|
||||
break;}
|
||||
case 4:
|
||||
#line 234 "getdate.y"
|
||||
#line 241 "getdate.y"
|
||||
{
|
||||
yyHaveZone++;
|
||||
context->yyHaveZone++;
|
||||
;
|
||||
break;}
|
||||
case 5:
|
||||
#line 237 "getdate.y"
|
||||
#line 244 "getdate.y"
|
||||
{
|
||||
yyHaveDate++;
|
||||
context->yyHaveDate++;
|
||||
;
|
||||
break;}
|
||||
case 6:
|
||||
#line 240 "getdate.y"
|
||||
#line 247 "getdate.y"
|
||||
{
|
||||
yyHaveDay++;
|
||||
context->yyHaveDay++;
|
||||
;
|
||||
break;}
|
||||
case 7:
|
||||
#line 243 "getdate.y"
|
||||
#line 250 "getdate.y"
|
||||
{
|
||||
yyHaveRel++;
|
||||
context->yyHaveRel++;
|
||||
;
|
||||
break;}
|
||||
case 9:
|
||||
#line 249 "getdate.y"
|
||||
#line 256 "getdate.y"
|
||||
{
|
||||
yyHour = yyvsp[-1].Number;
|
||||
yyMinutes = 0;
|
||||
yySeconds = 0;
|
||||
yyMeridian = yyvsp[0].Meridian;
|
||||
context->yyHour = yyvsp[-1].Number;
|
||||
context->yyMinutes = 0;
|
||||
context->yySeconds = 0;
|
||||
context->yyMeridian = yyvsp[0].Meridian;
|
||||
;
|
||||
break;}
|
||||
case 10:
|
||||
#line 255 "getdate.y"
|
||||
#line 262 "getdate.y"
|
||||
{
|
||||
yyHour = yyvsp[-3].Number;
|
||||
yyMinutes = yyvsp[-1].Number;
|
||||
yySeconds = 0;
|
||||
yyMeridian = yyvsp[0].Meridian;
|
||||
context->yyHour = yyvsp[-3].Number;
|
||||
context->yyMinutes = yyvsp[-1].Number;
|
||||
context->yySeconds = 0;
|
||||
context->yyMeridian = yyvsp[0].Meridian;
|
||||
;
|
||||
break;}
|
||||
case 11:
|
||||
#line 261 "getdate.y"
|
||||
#line 268 "getdate.y"
|
||||
{
|
||||
yyHour = yyvsp[-3].Number;
|
||||
yyMinutes = yyvsp[-1].Number;
|
||||
yyMeridian = MER24;
|
||||
yyHaveZone++;
|
||||
yyTimezone = (yyvsp[0].Number < 0
|
||||
? -yyvsp[0].Number % 100 + (-yyvsp[0].Number / 100) * 60
|
||||
: - (yyvsp[0].Number % 100 + (yyvsp[0].Number / 100) * 60));
|
||||
context->yyHour = yyvsp[-3].Number;
|
||||
context->yyMinutes = yyvsp[-1].Number;
|
||||
context->yyMeridian = MER24;
|
||||
context->yyHaveZone++;
|
||||
context->yyTimezone = (yyvsp[0].Number < 0
|
||||
? -yyvsp[0].Number % 100 + (-yyvsp[0].Number / 100) * 60
|
||||
: - (yyvsp[0].Number % 100 + (yyvsp[0].Number / 100) * 60));
|
||||
;
|
||||
break;}
|
||||
case 12:
|
||||
#line 270 "getdate.y"
|
||||
#line 277 "getdate.y"
|
||||
{
|
||||
yyHour = yyvsp[-5].Number;
|
||||
yyMinutes = yyvsp[-3].Number;
|
||||
yySeconds = yyvsp[-1].Number;
|
||||
yyMeridian = yyvsp[0].Meridian;
|
||||
context->yyHour = yyvsp[-5].Number;
|
||||
context->yyMinutes = yyvsp[-3].Number;
|
||||
context->yySeconds = yyvsp[-1].Number;
|
||||
context->yyMeridian = yyvsp[0].Meridian;
|
||||
;
|
||||
break;}
|
||||
case 13:
|
||||
#line 276 "getdate.y"
|
||||
#line 283 "getdate.y"
|
||||
{
|
||||
yyHour = yyvsp[-5].Number;
|
||||
yyMinutes = yyvsp[-3].Number;
|
||||
yySeconds = yyvsp[-1].Number;
|
||||
yyMeridian = MER24;
|
||||
yyHaveZone++;
|
||||
yyTimezone = (yyvsp[0].Number < 0
|
||||
? -yyvsp[0].Number % 100 + (-yyvsp[0].Number / 100) * 60
|
||||
: - (yyvsp[0].Number % 100 + (yyvsp[0].Number / 100) * 60));
|
||||
context->yyHour = yyvsp[-5].Number;
|
||||
context->yyMinutes = yyvsp[-3].Number;
|
||||
context->yySeconds = yyvsp[-1].Number;
|
||||
context->yyMeridian = MER24;
|
||||
context->yyHaveZone++;
|
||||
context->yyTimezone = (yyvsp[0].Number < 0
|
||||
? -yyvsp[0].Number % 100 + (-yyvsp[0].Number / 100) * 60
|
||||
: - (yyvsp[0].Number % 100 + (yyvsp[0].Number / 100) * 60));
|
||||
;
|
||||
break;}
|
||||
case 14:
|
||||
#line 288 "getdate.y"
|
||||
#line 295 "getdate.y"
|
||||
{
|
||||
yyTimezone = yyvsp[0].Number;
|
||||
context->yyTimezone = yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 15:
|
||||
#line 291 "getdate.y"
|
||||
#line 298 "getdate.y"
|
||||
{
|
||||
yyTimezone = yyvsp[0].Number - 60;
|
||||
context->yyTimezone = yyvsp[0].Number - 60;
|
||||
;
|
||||
break;}
|
||||
case 16:
|
||||
#line 295 "getdate.y"
|
||||
#line 302 "getdate.y"
|
||||
{
|
||||
yyTimezone = yyvsp[-1].Number - 60;
|
||||
context->yyTimezone = yyvsp[-1].Number - 60;
|
||||
;
|
||||
break;}
|
||||
case 17:
|
||||
#line 300 "getdate.y"
|
||||
#line 307 "getdate.y"
|
||||
{
|
||||
yyDayOrdinal = 1;
|
||||
yyDayNumber = yyvsp[0].Number;
|
||||
context->yyDayOrdinal = 1;
|
||||
context->yyDayNumber = yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 18:
|
||||
#line 304 "getdate.y"
|
||||
#line 311 "getdate.y"
|
||||
{
|
||||
yyDayOrdinal = 1;
|
||||
yyDayNumber = yyvsp[-1].Number;
|
||||
context->yyDayOrdinal = 1;
|
||||
context->yyDayNumber = yyvsp[-1].Number;
|
||||
;
|
||||
break;}
|
||||
case 19:
|
||||
#line 308 "getdate.y"
|
||||
#line 315 "getdate.y"
|
||||
{
|
||||
yyDayOrdinal = yyvsp[-1].Number;
|
||||
yyDayNumber = yyvsp[0].Number;
|
||||
context->yyDayOrdinal = yyvsp[-1].Number;
|
||||
context->yyDayNumber = yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 20:
|
||||
#line 314 "getdate.y"
|
||||
#line 321 "getdate.y"
|
||||
{
|
||||
yyMonth = yyvsp[-2].Number;
|
||||
yyDay = yyvsp[0].Number;
|
||||
context->yyMonth = yyvsp[-2].Number;
|
||||
context->yyDay = yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 21:
|
||||
#line 318 "getdate.y"
|
||||
#line 325 "getdate.y"
|
||||
{
|
||||
/* Interpret as YYYY/MM/DD if $1 >= 1000, otherwise as MM/DD/YY.
|
||||
The goal in recognizing YYYY/MM/DD is solely to support legacy
|
||||
@ -1075,226 +1079,227 @@ case 21:
|
||||
you want portability, use the ISO 8601 format. */
|
||||
if (yyvsp[-4].Number >= 1000)
|
||||
{
|
||||
yyYear = yyvsp[-4].Number;
|
||||
yyMonth = yyvsp[-2].Number;
|
||||
yyDay = yyvsp[0].Number;
|
||||
context->yyYear = yyvsp[-4].Number;
|
||||
context->yyMonth = yyvsp[-2].Number;
|
||||
context->yyDay = yyvsp[0].Number;
|
||||
}
|
||||
else
|
||||
{
|
||||
yyMonth = yyvsp[-4].Number;
|
||||
yyDay = yyvsp[-2].Number;
|
||||
yyYear = yyvsp[0].Number;
|
||||
context->yyMonth = yyvsp[-4].Number;
|
||||
context->yyDay = yyvsp[-2].Number;
|
||||
context->yyYear = yyvsp[0].Number;
|
||||
}
|
||||
;
|
||||
break;}
|
||||
case 22:
|
||||
#line 336 "getdate.y"
|
||||
#line 343 "getdate.y"
|
||||
{
|
||||
/* ISO 8601 format. yyyy-mm-dd. */
|
||||
yyYear = yyvsp[-2].Number;
|
||||
yyMonth = -yyvsp[-1].Number;
|
||||
yyDay = -yyvsp[0].Number;
|
||||
context->yyYear = yyvsp[-2].Number;
|
||||
context->yyMonth = -yyvsp[-1].Number;
|
||||
context->yyDay = -yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 23:
|
||||
#line 342 "getdate.y"
|
||||
#line 349 "getdate.y"
|
||||
{
|
||||
/* e.g. 17-JUN-1992. */
|
||||
yyDay = yyvsp[-2].Number;
|
||||
yyMonth = yyvsp[-1].Number;
|
||||
yyYear = -yyvsp[0].Number;
|
||||
context->yyDay = yyvsp[-2].Number;
|
||||
context->yyMonth = yyvsp[-1].Number;
|
||||
context->yyYear = -yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 24:
|
||||
#line 348 "getdate.y"
|
||||
#line 355 "getdate.y"
|
||||
{
|
||||
yyMonth = yyvsp[-1].Number;
|
||||
yyDay = yyvsp[0].Number;
|
||||
context->yyMonth = yyvsp[-1].Number;
|
||||
context->yyDay = yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 25:
|
||||
#line 352 "getdate.y"
|
||||
#line 359 "getdate.y"
|
||||
{
|
||||
yyMonth = yyvsp[-3].Number;
|
||||
yyDay = yyvsp[-2].Number;
|
||||
yyYear = yyvsp[0].Number;
|
||||
context->yyMonth = yyvsp[-3].Number;
|
||||
context->yyDay = yyvsp[-2].Number;
|
||||
context->yyYear = yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 26:
|
||||
#line 357 "getdate.y"
|
||||
#line 364 "getdate.y"
|
||||
{
|
||||
yyMonth = yyvsp[0].Number;
|
||||
yyDay = yyvsp[-1].Number;
|
||||
context->yyMonth = yyvsp[0].Number;
|
||||
context->yyDay = yyvsp[-1].Number;
|
||||
;
|
||||
break;}
|
||||
case 27:
|
||||
#line 361 "getdate.y"
|
||||
#line 368 "getdate.y"
|
||||
{
|
||||
yyMonth = yyvsp[-1].Number;
|
||||
yyDay = yyvsp[-2].Number;
|
||||
yyYear = yyvsp[0].Number;
|
||||
context->yyMonth = yyvsp[-1].Number;
|
||||
context->yyDay = yyvsp[-2].Number;
|
||||
context->yyYear = yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 28:
|
||||
#line 368 "getdate.y"
|
||||
#line 375 "getdate.y"
|
||||
{
|
||||
yyRelSeconds = -yyRelSeconds;
|
||||
yyRelMinutes = -yyRelMinutes;
|
||||
yyRelHour = -yyRelHour;
|
||||
yyRelDay = -yyRelDay;
|
||||
yyRelMonth = -yyRelMonth;
|
||||
yyRelYear = -yyRelYear;
|
||||
context->yyRelSeconds = -context->yyRelSeconds;
|
||||
context->yyRelMinutes = -context->yyRelMinutes;
|
||||
context->yyRelHour = -context->yyRelHour;
|
||||
context->yyRelDay = -context->yyRelDay;
|
||||
context->yyRelMonth = -context->yyRelMonth;
|
||||
context->yyRelYear = -context->yyRelYear;
|
||||
;
|
||||
break;}
|
||||
case 30:
|
||||
#line 379 "getdate.y"
|
||||
#line 386 "getdate.y"
|
||||
{
|
||||
yyRelYear += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
context->yyRelYear += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 31:
|
||||
#line 382 "getdate.y"
|
||||
#line 389 "getdate.y"
|
||||
{
|
||||
yyRelYear += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
context->yyRelYear += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 32:
|
||||
#line 385 "getdate.y"
|
||||
#line 392 "getdate.y"
|
||||
{
|
||||
yyRelYear += yyvsp[0].Number;
|
||||
context->yyRelYear += yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 33:
|
||||
#line 388 "getdate.y"
|
||||
#line 395 "getdate.y"
|
||||
{
|
||||
yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
context->yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 34:
|
||||
#line 391 "getdate.y"
|
||||
#line 398 "getdate.y"
|
||||
{
|
||||
yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
context->yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 35:
|
||||
#line 394 "getdate.y"
|
||||
#line 401 "getdate.y"
|
||||
{
|
||||
yyRelMonth += yyvsp[0].Number;
|
||||
context->yyRelMonth += yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 36:
|
||||
#line 397 "getdate.y"
|
||||
#line 404 "getdate.y"
|
||||
{
|
||||
yyRelDay += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
context->yyRelDay += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 37:
|
||||
#line 400 "getdate.y"
|
||||
#line 407 "getdate.y"
|
||||
{
|
||||
yyRelDay += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
context->yyRelDay += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 38:
|
||||
#line 403 "getdate.y"
|
||||
#line 410 "getdate.y"
|
||||
{
|
||||
yyRelDay += yyvsp[0].Number;
|
||||
context->yyRelDay += yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 39:
|
||||
#line 406 "getdate.y"
|
||||
#line 413 "getdate.y"
|
||||
{
|
||||
yyRelHour += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
context->yyRelHour += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 40:
|
||||
#line 409 "getdate.y"
|
||||
#line 416 "getdate.y"
|
||||
{
|
||||
yyRelHour += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
context->yyRelHour += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 41:
|
||||
#line 412 "getdate.y"
|
||||
#line 419 "getdate.y"
|
||||
{
|
||||
yyRelHour += yyvsp[0].Number;
|
||||
context->yyRelHour += yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 42:
|
||||
#line 415 "getdate.y"
|
||||
#line 422 "getdate.y"
|
||||
{
|
||||
yyRelMinutes += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
context->yyRelMinutes += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 43:
|
||||
#line 418 "getdate.y"
|
||||
#line 425 "getdate.y"
|
||||
{
|
||||
yyRelMinutes += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
context->yyRelMinutes += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 44:
|
||||
#line 421 "getdate.y"
|
||||
#line 428 "getdate.y"
|
||||
{
|
||||
yyRelMinutes += yyvsp[0].Number;
|
||||
context->yyRelMinutes += yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 45:
|
||||
#line 424 "getdate.y"
|
||||
#line 431 "getdate.y"
|
||||
{
|
||||
yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
context->yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 46:
|
||||
#line 427 "getdate.y"
|
||||
#line 434 "getdate.y"
|
||||
{
|
||||
yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
context->yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 47:
|
||||
#line 430 "getdate.y"
|
||||
#line 437 "getdate.y"
|
||||
{
|
||||
yyRelSeconds += yyvsp[0].Number;
|
||||
context->yyRelSeconds += yyvsp[0].Number;
|
||||
;
|
||||
break;}
|
||||
case 48:
|
||||
#line 436 "getdate.y"
|
||||
#line 443 "getdate.y"
|
||||
{
|
||||
if (yyHaveTime && yyHaveDate && !yyHaveRel)
|
||||
yyYear = yyvsp[0].Number;
|
||||
if (context->yyHaveTime && context->yyHaveDate &&
|
||||
!context->yyHaveRel)
|
||||
context->yyYear = yyvsp[0].Number;
|
||||
else
|
||||
{
|
||||
if (yyvsp[0].Number>10000)
|
||||
{
|
||||
yyHaveDate++;
|
||||
yyDay= (yyvsp[0].Number)%100;
|
||||
yyMonth= (yyvsp[0].Number/100)%100;
|
||||
yyYear = yyvsp[0].Number/10000;
|
||||
context->yyHaveDate++;
|
||||
context->yyDay= (yyvsp[0].Number)%100;
|
||||
context->yyMonth= (yyvsp[0].Number/100)%100;
|
||||
context->yyYear = yyvsp[0].Number/10000;
|
||||
}
|
||||
else
|
||||
{
|
||||
yyHaveTime++;
|
||||
context->yyHaveTime++;
|
||||
if (yyvsp[0].Number < 100)
|
||||
{
|
||||
yyHour = yyvsp[0].Number;
|
||||
yyMinutes = 0;
|
||||
context->yyHour = yyvsp[0].Number;
|
||||
context->yyMinutes = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
yyHour = yyvsp[0].Number / 100;
|
||||
yyMinutes = yyvsp[0].Number % 100;
|
||||
context->yyHour = yyvsp[0].Number / 100;
|
||||
context->yyMinutes = yyvsp[0].Number % 100;
|
||||
}
|
||||
yySeconds = 0;
|
||||
yyMeridian = MER24;
|
||||
context->yySeconds = 0;
|
||||
context->yyMeridian = MER24;
|
||||
}
|
||||
}
|
||||
;
|
||||
break;}
|
||||
case 49:
|
||||
#line 469 "getdate.y"
|
||||
#line 477 "getdate.y"
|
||||
{
|
||||
yyval.Meridian = MER24;
|
||||
;
|
||||
break;}
|
||||
case 50:
|
||||
#line 473 "getdate.y"
|
||||
#line 481 "getdate.y"
|
||||
{
|
||||
yyval.Meridian = yyvsp[0].Meridian;
|
||||
;
|
||||
@ -1521,7 +1526,7 @@ yyerrhandle:
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
#line 478 "getdate.y"
|
||||
#line 486 "getdate.y"
|
||||
|
||||
|
||||
/* Include this file down here because bison inserts code above which
|
||||
@ -1777,7 +1782,8 @@ ToYear (Year)
|
||||
}
|
||||
|
||||
static int
|
||||
LookupWord (buff)
|
||||
LookupWord (yylval, buff)
|
||||
YYSTYPE *yylval;
|
||||
char *buff;
|
||||
{
|
||||
register char *p;
|
||||
@ -1793,12 +1799,12 @@ LookupWord (buff)
|
||||
|
||||
if (strcmp (buff, "am") == 0 || strcmp (buff, "a.m.") == 0)
|
||||
{
|
||||
yylval.Meridian = MERam;
|
||||
yylval->Meridian = MERam;
|
||||
return tMERIDIAN;
|
||||
}
|
||||
if (strcmp (buff, "pm") == 0 || strcmp (buff, "p.m.") == 0)
|
||||
{
|
||||
yylval.Meridian = MERpm;
|
||||
yylval->Meridian = MERpm;
|
||||
return tMERIDIAN;
|
||||
}
|
||||
|
||||
@ -1819,13 +1825,13 @@ LookupWord (buff)
|
||||
{
|
||||
if (strncmp (buff, tp->name, 3) == 0)
|
||||
{
|
||||
yylval.Number = tp->value;
|
||||
yylval->Number = tp->value;
|
||||
return tp->type;
|
||||
}
|
||||
}
|
||||
else if (strcmp (buff, tp->name) == 0)
|
||||
{
|
||||
yylval.Number = tp->value;
|
||||
yylval->Number = tp->value;
|
||||
return tp->type;
|
||||
}
|
||||
}
|
||||
@ -1833,7 +1839,7 @@ LookupWord (buff)
|
||||
for (tp = TimezoneTable; tp->name; tp++)
|
||||
if (strcmp (buff, tp->name) == 0)
|
||||
{
|
||||
yylval.Number = tp->value;
|
||||
yylval->Number = tp->value;
|
||||
return tp->type;
|
||||
}
|
||||
|
||||
@ -1843,7 +1849,7 @@ LookupWord (buff)
|
||||
for (tp = UnitsTable; tp->name; tp++)
|
||||
if (strcmp (buff, tp->name) == 0)
|
||||
{
|
||||
yylval.Number = tp->value;
|
||||
yylval->Number = tp->value;
|
||||
return tp->type;
|
||||
}
|
||||
|
||||
@ -1855,7 +1861,7 @@ LookupWord (buff)
|
||||
for (tp = UnitsTable; tp->name; tp++)
|
||||
if (strcmp (buff, tp->name) == 0)
|
||||
{
|
||||
yylval.Number = tp->value;
|
||||
yylval->Number = tp->value;
|
||||
return tp->type;
|
||||
}
|
||||
buff[i] = 's'; /* Put back for "this" in OtherTable. */
|
||||
@ -1864,7 +1870,7 @@ LookupWord (buff)
|
||||
for (tp = OtherTable; tp->name; tp++)
|
||||
if (strcmp (buff, tp->name) == 0)
|
||||
{
|
||||
yylval.Number = tp->value;
|
||||
yylval->Number = tp->value;
|
||||
return tp->type;
|
||||
}
|
||||
|
||||
@ -1874,7 +1880,7 @@ LookupWord (buff)
|
||||
for (tp = MilitaryTable; tp->name; tp++)
|
||||
if (strcmp (buff, tp->name) == 0)
|
||||
{
|
||||
yylval.Number = tp->value;
|
||||
yylval->Number = tp->value;
|
||||
return tp->type;
|
||||
}
|
||||
}
|
||||
@ -1890,7 +1896,7 @@ LookupWord (buff)
|
||||
for (tp = TimezoneTable; tp->name; tp++)
|
||||
if (strcmp (buff, tp->name) == 0)
|
||||
{
|
||||
yylval.Number = tp->value;
|
||||
yylval->Number = tp->value;
|
||||
return tp->type;
|
||||
}
|
||||
|
||||
@ -1898,7 +1904,9 @@ LookupWord (buff)
|
||||
}
|
||||
|
||||
static int
|
||||
yylex ()
|
||||
yylex (yylval, cookie)
|
||||
YYSTYPE *yylval;
|
||||
void *cookie;
|
||||
{
|
||||
register unsigned char c;
|
||||
register char *p;
|
||||
@ -1908,42 +1916,42 @@ yylex ()
|
||||
|
||||
for (;;)
|
||||
{
|
||||
while (ISSPACE ((unsigned char) *yyInput))
|
||||
yyInput++;
|
||||
while (ISSPACE ((unsigned char) *context->yyInput))
|
||||
context->yyInput++;
|
||||
|
||||
if (ISDIGIT (c = *yyInput) || c == '-' || c == '+')
|
||||
if (ISDIGIT (c = *context->yyInput) || c == '-' || c == '+')
|
||||
{
|
||||
if (c == '-' || c == '+')
|
||||
{
|
||||
sign = c == '-' ? -1 : 1;
|
||||
if (!ISDIGIT (*++yyInput))
|
||||
if (!ISDIGIT (*++context->yyInput))
|
||||
/* skip the '-' sign */
|
||||
continue;
|
||||
}
|
||||
else
|
||||
sign = 0;
|
||||
for (yylval.Number = 0; ISDIGIT (c = *yyInput++);)
|
||||
yylval.Number = 10 * yylval.Number + c - '0';
|
||||
yyInput--;
|
||||
for (yylval->Number = 0; ISDIGIT (c = *context->yyInput++);)
|
||||
yylval->Number = 10 * yylval->Number + c - '0';
|
||||
context->yyInput--;
|
||||
if (sign < 0)
|
||||
yylval.Number = -yylval.Number;
|
||||
yylval->Number = -yylval->Number;
|
||||
return sign ? tSNUMBER : tUNUMBER;
|
||||
}
|
||||
if (ISALPHA (c))
|
||||
{
|
||||
for (p = buff; (c = *yyInput++, ISALPHA (c)) || c == '.';)
|
||||
for (p = buff; (c = *context->yyInput++, ISALPHA (c)) || c == '.';)
|
||||
if (p < &buff[sizeof buff - 1])
|
||||
*p++ = c;
|
||||
*p = '\0';
|
||||
yyInput--;
|
||||
return LookupWord (buff);
|
||||
context->yyInput--;
|
||||
return LookupWord (yylval, buff);
|
||||
}
|
||||
if (c != '(')
|
||||
return *yyInput++;
|
||||
return *context->yyInput++;
|
||||
Count = 0;
|
||||
do
|
||||
{
|
||||
c = *yyInput++;
|
||||
c = *context->yyInput++;
|
||||
if (c == '\0')
|
||||
return c;
|
||||
if (c == '(')
|
||||
@ -1983,10 +1991,11 @@ curl_getdate (const char *p, const time_t *now)
|
||||
{
|
||||
struct tm tm, tm0, *tmp;
|
||||
time_t Start;
|
||||
CONTEXT cookie;
|
||||
#ifdef HAVE_LOCALTIME_R
|
||||
struct tm keeptime;
|
||||
#endif
|
||||
yyInput = p;
|
||||
cookie.yyInput = p;
|
||||
Start = now ? *now : time ((time_t *) NULL);
|
||||
#ifdef HAVE_LOCALTIME_R
|
||||
tmp = (struct tm *)localtime_r(&Start, &keeptime);
|
||||
@ -1995,52 +2004,55 @@ curl_getdate (const char *p, const time_t *now)
|
||||
#endif
|
||||
if (!tmp)
|
||||
return -1;
|
||||
yyYear = tmp->tm_year + TM_YEAR_ORIGIN;
|
||||
yyMonth = tmp->tm_mon + 1;
|
||||
yyDay = tmp->tm_mday;
|
||||
yyHour = tmp->tm_hour;
|
||||
yyMinutes = tmp->tm_min;
|
||||
yySeconds = tmp->tm_sec;
|
||||
cookie.yyYear = tmp->tm_year + TM_YEAR_ORIGIN;
|
||||
cookie.yyMonth = tmp->tm_mon + 1;
|
||||
cookie.yyDay = tmp->tm_mday;
|
||||
cookie.yyHour = tmp->tm_hour;
|
||||
cookie.yyMinutes = tmp->tm_min;
|
||||
cookie.yySeconds = tmp->tm_sec;
|
||||
tm.tm_isdst = tmp->tm_isdst;
|
||||
yyMeridian = MER24;
|
||||
yyRelSeconds = 0;
|
||||
yyRelMinutes = 0;
|
||||
yyRelHour = 0;
|
||||
yyRelDay = 0;
|
||||
yyRelMonth = 0;
|
||||
yyRelYear = 0;
|
||||
yyHaveDate = 0;
|
||||
yyHaveDay = 0;
|
||||
yyHaveRel = 0;
|
||||
yyHaveTime = 0;
|
||||
yyHaveZone = 0;
|
||||
cookie.yyMeridian = MER24;
|
||||
cookie.yyRelSeconds = 0;
|
||||
cookie.yyRelMinutes = 0;
|
||||
cookie.yyRelHour = 0;
|
||||
cookie.yyRelDay = 0;
|
||||
cookie.yyRelMonth = 0;
|
||||
cookie.yyRelYear = 0;
|
||||
cookie.yyHaveDate = 0;
|
||||
cookie.yyHaveDay = 0;
|
||||
cookie.yyHaveRel = 0;
|
||||
cookie.yyHaveTime = 0;
|
||||
cookie.yyHaveZone = 0;
|
||||
|
||||
if (yyparse ()
|
||||
|| yyHaveTime > 1 || yyHaveZone > 1 || yyHaveDate > 1 || yyHaveDay > 1)
|
||||
if (yyparse (&cookie)
|
||||
|| cookie.yyHaveTime > 1 || cookie.yyHaveZone > 1 ||
|
||||
cookie.yyHaveDate > 1 || cookie.yyHaveDay > 1)
|
||||
return -1;
|
||||
|
||||
tm.tm_year = ToYear (yyYear) - TM_YEAR_ORIGIN + yyRelYear;
|
||||
tm.tm_mon = yyMonth - 1 + yyRelMonth;
|
||||
tm.tm_mday = yyDay + yyRelDay;
|
||||
if (yyHaveTime || (yyHaveRel && !yyHaveDate && !yyHaveDay))
|
||||
tm.tm_year = ToYear (cookie.yyYear) - TM_YEAR_ORIGIN + cookie.yyRelYear;
|
||||
tm.tm_mon = cookie.yyMonth - 1 + cookie.yyRelMonth;
|
||||
tm.tm_mday = cookie.yyDay + cookie.yyRelDay;
|
||||
if (cookie.yyHaveTime ||
|
||||
(cookie.yyHaveRel && !cookie.yyHaveDate && !cookie.yyHaveDay))
|
||||
{
|
||||
tm.tm_hour = ToHour (yyHour, yyMeridian);
|
||||
tm.tm_hour = ToHour (cookie.yyHour, cookie.yyMeridian);
|
||||
if (tm.tm_hour < 0)
|
||||
return -1;
|
||||
tm.tm_min = yyMinutes;
|
||||
tm.tm_sec = yySeconds;
|
||||
tm.tm_min = cookie.yyMinutes;
|
||||
tm.tm_sec = cookie.yySeconds;
|
||||
}
|
||||
else
|
||||
{
|
||||
tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
|
||||
}
|
||||
tm.tm_hour += yyRelHour;
|
||||
tm.tm_min += yyRelMinutes;
|
||||
tm.tm_sec += yyRelSeconds;
|
||||
tm.tm_hour += cookie.yyRelHour;
|
||||
tm.tm_min += cookie.yyRelMinutes;
|
||||
tm.tm_sec += cookie.yyRelSeconds;
|
||||
|
||||
/* Let mktime deduce tm_isdst if we have an absolute timestamp,
|
||||
or if the relative timestamp mentions days, months, or years. */
|
||||
if (yyHaveDate | yyHaveDay | yyHaveTime | yyRelDay | yyRelMonth | yyRelYear)
|
||||
if (cookie.yyHaveDate | cookie.yyHaveDay | cookie.yyHaveTime |
|
||||
cookie.yyRelDay | cookie.yyRelMonth | cookie.yyRelYear)
|
||||
tm.tm_isdst = -1;
|
||||
|
||||
tm0 = tm;
|
||||
@ -2058,18 +2070,18 @@ curl_getdate (const char *p, const time_t *now)
|
||||
we apply mktime to 1970-01-02 08:00:00 instead and adjust the time
|
||||
zone by 24 hours to compensate. This algorithm assumes that
|
||||
there is no DST transition within a day of the time_t boundaries. */
|
||||
if (yyHaveZone)
|
||||
if (cookie.yyHaveZone)
|
||||
{
|
||||
tm = tm0;
|
||||
if (tm.tm_year <= EPOCH - TM_YEAR_ORIGIN)
|
||||
{
|
||||
tm.tm_mday++;
|
||||
yyTimezone -= 24 * 60;
|
||||
cookie.yyTimezone -= 24 * 60;
|
||||
}
|
||||
else
|
||||
{
|
||||
tm.tm_mday--;
|
||||
yyTimezone += 24 * 60;
|
||||
cookie.yyTimezone += 24 * 60;
|
||||
}
|
||||
Start = mktime (&tm);
|
||||
}
|
||||
@ -2078,22 +2090,22 @@ curl_getdate (const char *p, const time_t *now)
|
||||
return Start;
|
||||
}
|
||||
|
||||
if (yyHaveDay && !yyHaveDate)
|
||||
if (cookie.yyHaveDay && !cookie.yyHaveDate)
|
||||
{
|
||||
tm.tm_mday += ((yyDayNumber - tm.tm_wday + 7) % 7
|
||||
+ 7 * (yyDayOrdinal - (0 < yyDayOrdinal)));
|
||||
tm.tm_mday += ((cookie.yyDayNumber - tm.tm_wday + 7) % 7
|
||||
+ 7 * (cookie.yyDayOrdinal - (0 < cookie.yyDayOrdinal)));
|
||||
Start = mktime (&tm);
|
||||
if (Start == (time_t) -1)
|
||||
return Start;
|
||||
}
|
||||
|
||||
if (yyHaveZone)
|
||||
if (cookie.yyHaveZone)
|
||||
{
|
||||
long delta;
|
||||
struct tm *gmt = gmtime (&Start);
|
||||
if (!gmt)
|
||||
return -1;
|
||||
delta = yyTimezone * 60L + difftm (&tm, gmt);
|
||||
delta = cookie.yyTimezone * 60L + difftm (&tm, gmt);
|
||||
if ((Start + delta < Start) != (delta < 0))
|
||||
return -1; /* time_t overflow */
|
||||
Start += delta;
|
||||
|
Loading…
Reference in New Issue
Block a user