summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Ruby <rubys@php.net>1999-12-07 02:47:35 +0000
committerSam Ruby <rubys@php.net>1999-12-07 02:47:35 +0000
commite3cbafdda67cac7fa604a98ed774c5436db62b0d (patch)
tree86df5ae93b2b20d70e08a542dabc5cd1e6f74e8e
parent091c58f734f472cf96c842fc4345f5dbd9fa32f5 (diff)
downloadphp-git-e3cbafdda67cac7fa604a98ed774c5436db62b0d.tar.gz
-kludges -warning +reentrancy(more) +compiles(Unix)
-rw-r--r--ext/standard/parsedate.y23
1 files changed, 10 insertions, 13 deletions
diff --git a/ext/standard/parsedate.y b/ext/standard/parsedate.y
index eebd2cb224..60245f6c69 100644
--- a/ext/standard/parsedate.y
+++ b/ext/standard/parsedate.y
@@ -52,8 +52,6 @@
#if WIN32||WINNT
# include <time.h>
-# include "php.h"
-# undef YYSTYPE
# include "php_reentrancy.h"
#else
# if !defined(HAVE_TM_ZONE) && !defined(_TIMEZONE)
@@ -62,8 +60,6 @@ extern time_t timezone;
#endif
-
-
#define yylhs date_yylhs
#define yylen date_yylen
#define yydefred date_yydefred
@@ -157,10 +153,6 @@ static time_t yyRelMonth;
static time_t yyRelSeconds;
-extern struct tm *localtime(const time_t *timep);
-
-/* YYSTYPE is not yet defined at this point */
-static int date_lex(void *yylval);
static void date_error(char *s);
@@ -174,6 +166,10 @@ static void date_error(char *s);
enum _MERIDIAN Meridian;
}
+%{
+static int date_lex(YYSTYPE *yylval);
+%}
+
%token tDAY tDAYZONE tMERIDIAN tMONTH tMONTH_UNIT tSEC_UNIT tSNUMBER
%token tUNUMBER tZONE
@@ -642,6 +638,7 @@ Convert(time_t Month, time_t Day, time_t Year, time_t Hours, time_t Minutes, tim
time_t Julian;
int i;
time_t tod;
+ struct tm tmbuf;
/* Year should not be passed as a relative value, but absolute one.
so this should not happen, but just ensure it */
@@ -674,7 +671,7 @@ Convert(time_t Month, time_t Day, time_t Year, time_t Hours, time_t Minutes, tim
return -1;
Julian += tod;
tod = Julian;
- if (dst == DSTon || (dst == DSTmaybe && localtime(&tod)->tm_isdst))
+ if (dst == DSTon || (dst == DSTmaybe && localtime_r(&tod,&tmbuf)->tm_isdst))
Julian -= DST_OFFSET * 60 * 60;
return Julian;
}
@@ -685,9 +682,10 @@ DSTcorrect(time_t Start, time_t Future)
{
time_t StartDay;
time_t FutureDay;
+ struct tm tmbuf;
- StartDay = (localtime(&Start)->tm_hour + 1) % 24;
- FutureDay = (localtime(&Future)->tm_hour + 1) % 24;
+ StartDay = (localtime_r(&Start,&tmbuf)->tm_hour + 1) % 24;
+ FutureDay = (localtime_r(&Future,&tmbuf)->tm_hour + 1) % 24;
return (Future - Start) + (StartDay - FutureDay) * DST_OFFSET * 60 * 60;
}
@@ -864,7 +862,6 @@ static int date_lex(YYSTYPE *yylval)
time_t parsedate(char *p, TIMEINFO *now)
{
- extern int date_parse(void);
struct tm *tm, tmbuf;
TIMEINFO ti;
time_t Start;
@@ -895,7 +892,7 @@ time_t parsedate(char *p, TIMEINFO *now)
yyHaveRel = 0;
yyHaveTime = 0;
- if (date_parse() || yyHaveTime > 1 || yyHaveDate > 1)
+ if (date_parse(YYPARSE_PARAM_ARG) || yyHaveTime > 1 || yyHaveDate > 1)
return -1;
if (yyHaveDate || yyHaveTime) {