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