generated from the newly edited getdate.y that now supports a thread-safe

localtime() call
This commit is contained in:
Daniel Stenberg 2000-07-31 21:32:46 +00:00
parent a79b541bd2
commit 4c32b6c201
1 changed files with 89 additions and 79 deletions

View File

@ -33,10 +33,13 @@
*/
#ifdef HAVE_CONFIG_H
# include <config.h>
# include "config.h"
# ifdef HAVE_ALLOCA_H
# include <alloca.h>
# endif
# ifdef HAVE_TIME_H
# include <time.h>
# endif
#endif
/* Since the code of getdate.y is not included in the Emacs executable
@ -212,7 +215,7 @@ static int yyRelSeconds;
static int yyRelYear;
#line 195 "getdate.y"
#line 198 "getdate.y"
typedef union {
int Number;
enum _MERIDIAN Meridian;
@ -295,11 +298,11 @@ static const short yyrhs[] = { -1,
#if YYDEBUG != 0
static const short yyrline[] = { 0,
211, 212, 215, 218, 221, 224, 227, 230, 233, 239,
245, 254, 260, 272, 275, 278, 284, 288, 292, 298,
302, 320, 326, 332, 336, 341, 345, 352, 360, 363,
366, 369, 372, 375, 378, 381, 384, 387, 390, 393,
396, 399, 402, 405, 408, 411, 414, 419, 452, 456
214, 215, 218, 221, 224, 227, 230, 233, 236, 242,
248, 257, 263, 275, 278, 281, 287, 291, 295, 301,
305, 323, 329, 335, 339, 344, 348, 355, 363, 366,
369, 372, 375, 378, 381, 384, 387, 390, 393, 396,
399, 402, 405, 408, 411, 414, 417, 422, 455, 459
};
#endif
@ -923,37 +926,37 @@ yyreduce:
switch (yyn) {
case 3:
#line 215 "getdate.y"
#line 218 "getdate.y"
{
yyHaveTime++;
;
break;}
case 4:
#line 218 "getdate.y"
#line 221 "getdate.y"
{
yyHaveZone++;
;
break;}
case 5:
#line 221 "getdate.y"
#line 224 "getdate.y"
{
yyHaveDate++;
;
break;}
case 6:
#line 224 "getdate.y"
#line 227 "getdate.y"
{
yyHaveDay++;
;
break;}
case 7:
#line 227 "getdate.y"
#line 230 "getdate.y"
{
yyHaveRel++;
;
break;}
case 9:
#line 233 "getdate.y"
#line 236 "getdate.y"
{
yyHour = yyvsp[-1].Number;
yyMinutes = 0;
@ -962,7 +965,7 @@ case 9:
;
break;}
case 10:
#line 239 "getdate.y"
#line 242 "getdate.y"
{
yyHour = yyvsp[-3].Number;
yyMinutes = yyvsp[-1].Number;
@ -971,7 +974,7 @@ case 10:
;
break;}
case 11:
#line 245 "getdate.y"
#line 248 "getdate.y"
{
yyHour = yyvsp[-3].Number;
yyMinutes = yyvsp[-1].Number;
@ -983,7 +986,7 @@ case 11:
;
break;}
case 12:
#line 254 "getdate.y"
#line 257 "getdate.y"
{
yyHour = yyvsp[-5].Number;
yyMinutes = yyvsp[-3].Number;
@ -992,7 +995,7 @@ case 12:
;
break;}
case 13:
#line 260 "getdate.y"
#line 263 "getdate.y"
{
yyHour = yyvsp[-5].Number;
yyMinutes = yyvsp[-3].Number;
@ -1005,53 +1008,53 @@ case 13:
;
break;}
case 14:
#line 272 "getdate.y"
#line 275 "getdate.y"
{
yyTimezone = yyvsp[0].Number;
;
break;}
case 15:
#line 275 "getdate.y"
#line 278 "getdate.y"
{
yyTimezone = yyvsp[0].Number - 60;
;
break;}
case 16:
#line 279 "getdate.y"
#line 282 "getdate.y"
{
yyTimezone = yyvsp[-1].Number - 60;
;
break;}
case 17:
#line 284 "getdate.y"
#line 287 "getdate.y"
{
yyDayOrdinal = 1;
yyDayNumber = yyvsp[0].Number;
;
break;}
case 18:
#line 288 "getdate.y"
#line 291 "getdate.y"
{
yyDayOrdinal = 1;
yyDayNumber = yyvsp[-1].Number;
;
break;}
case 19:
#line 292 "getdate.y"
#line 295 "getdate.y"
{
yyDayOrdinal = yyvsp[-1].Number;
yyDayNumber = yyvsp[0].Number;
;
break;}
case 20:
#line 298 "getdate.y"
#line 301 "getdate.y"
{
yyMonth = yyvsp[-2].Number;
yyDay = yyvsp[0].Number;
;
break;}
case 21:
#line 302 "getdate.y"
#line 305 "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
@ -1072,7 +1075,7 @@ case 21:
;
break;}
case 22:
#line 320 "getdate.y"
#line 323 "getdate.y"
{
/* ISO 8601 format. yyyy-mm-dd. */
yyYear = yyvsp[-2].Number;
@ -1081,7 +1084,7 @@ case 22:
;
break;}
case 23:
#line 326 "getdate.y"
#line 329 "getdate.y"
{
/* e.g. 17-JUN-1992. */
yyDay = yyvsp[-2].Number;
@ -1090,14 +1093,14 @@ case 23:
;
break;}
case 24:
#line 332 "getdate.y"
#line 335 "getdate.y"
{
yyMonth = yyvsp[-1].Number;
yyDay = yyvsp[0].Number;
;
break;}
case 25:
#line 336 "getdate.y"
#line 339 "getdate.y"
{
yyMonth = yyvsp[-3].Number;
yyDay = yyvsp[-2].Number;
@ -1105,14 +1108,14 @@ case 25:
;
break;}
case 26:
#line 341 "getdate.y"
#line 344 "getdate.y"
{
yyMonth = yyvsp[0].Number;
yyDay = yyvsp[-1].Number;
;
break;}
case 27:
#line 345 "getdate.y"
#line 348 "getdate.y"
{
yyMonth = yyvsp[-1].Number;
yyDay = yyvsp[-2].Number;
@ -1120,7 +1123,7 @@ case 27:
;
break;}
case 28:
#line 352 "getdate.y"
#line 355 "getdate.y"
{
yyRelSeconds = -yyRelSeconds;
yyRelMinutes = -yyRelMinutes;
@ -1131,115 +1134,115 @@ case 28:
;
break;}
case 30:
#line 363 "getdate.y"
{
yyRelYear += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 31:
#line 366 "getdate.y"
{
yyRelYear += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 32:
case 31:
#line 369 "getdate.y"
{
yyRelYear += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 32:
#line 372 "getdate.y"
{
yyRelYear += yyvsp[0].Number;
;
break;}
case 33:
#line 372 "getdate.y"
{
yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 34:
#line 375 "getdate.y"
{
yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 35:
case 34:
#line 378 "getdate.y"
{
yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 35:
#line 381 "getdate.y"
{
yyRelMonth += yyvsp[0].Number;
;
break;}
case 36:
#line 381 "getdate.y"
{
yyRelDay += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 37:
#line 384 "getdate.y"
{
yyRelDay += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 38:
case 37:
#line 387 "getdate.y"
{
yyRelDay += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 38:
#line 390 "getdate.y"
{
yyRelDay += yyvsp[0].Number;
;
break;}
case 39:
#line 390 "getdate.y"
{
yyRelHour += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 40:
#line 393 "getdate.y"
{
yyRelHour += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 41:
case 40:
#line 396 "getdate.y"
{
yyRelHour += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 41:
#line 399 "getdate.y"
{
yyRelHour += yyvsp[0].Number;
;
break;}
case 42:
#line 399 "getdate.y"
{
yyRelMinutes += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 43:
#line 402 "getdate.y"
{
yyRelMinutes += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 44:
case 43:
#line 405 "getdate.y"
{
yyRelMinutes += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 44:
#line 408 "getdate.y"
{
yyRelMinutes += yyvsp[0].Number;
;
break;}
case 45:
#line 408 "getdate.y"
{
yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 46:
#line 411 "getdate.y"
{
yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 47:
case 46:
#line 414 "getdate.y"
{
yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number;
;
break;}
case 47:
#line 417 "getdate.y"
{
yyRelSeconds += yyvsp[0].Number;
;
break;}
case 48:
#line 420 "getdate.y"
#line 423 "getdate.y"
{
if (yyHaveTime && yyHaveDate && !yyHaveRel)
yyYear = yyvsp[0].Number;
@ -1272,13 +1275,13 @@ case 48:
;
break;}
case 49:
#line 453 "getdate.y"
#line 456 "getdate.y"
{
yyval.Meridian = MER24;
;
break;}
case 50:
#line 457 "getdate.y"
#line 460 "getdate.y"
{
yyval.Meridian = yyvsp[0].Meridian;
;
@ -1505,7 +1508,7 @@ yyerrhandle:
}
return 1;
}
#line 462 "getdate.y"
#line 465 "getdate.y"
/* Include this file down here because bison inserts code above which
@ -1515,6 +1518,7 @@ yyerrhandle:
extern struct tm *gmtime ();
extern struct tm *localtime ();
extern struct tm *localtime_r (time_t *, struct tm *);
extern time_t mktime ();
/* Month and day table. */
@ -1965,10 +1969,16 @@ curl_getdate (const char *p, const time_t *now)
{
struct tm tm, tm0, *tmp;
time_t Start;
#ifdef HAVE_LOCALTIME_R
struct tm keeptime;
#endif
yyInput = p;
Start = now ? *now : time ((time_t *) NULL);
#ifdef HAVE_LOCALTIME_R
tmp = localtime_r(&Start, &keeptime);
#else
tmp = localtime (&Start);
#endif
if (!tmp)
return -1;
yyYear = tmp->tm_year + TM_YEAR_ORIGIN;