From: Sam Ruby <rubys@php.net>
Date: Tue, 7 Dec 1999 02:47:35 +0000 (+0000)
Subject: -kludges -warning +reentrancy(more) +compiles(Unix)
X-Git-Tag: PRE_RETURN_REF_PATCH~15
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e3cbafdda67cac7fa604a98ed774c5436db62b0d;p=php

-kludges -warning +reentrancy(more) +compiles(Unix)
---

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) {