Hi !

Here is small patch which makes ext/standard/datetime.c & parsedate.y use reentrant versions of date/time functions declared in PHP (php_localtime_r & php_gmtime_r).
May somebody commit it ?


Regards,
Wojtek

Index: datetime.c
===================================================================
RCS file: /repository/php-src/ext/standard/datetime.c,v
retrieving revision 1.96.2.15
diff -u -r1.96.2.15 datetime.c
--- datetime.c  31 Mar 2004 17:59:28 -0000      1.96.2.15
+++ datetime.c  25 Jun 2004 11:15:29 -0000
@@ -222,12 +222,12 @@
        */
        if (is_dst == -1) {
                struct tm t1, t2;
-               t1 = *localtime(&t);
-               t2 = *localtime(&seconds);
+               php_localtime_r(&t,&t1);
+               php_localtime_r(&seconds,&t2);
 
                if (t1.tm_isdst != t2.tm_isdst) {
                        seconds += (t1.tm_isdst == 1) ? 3600 : -3600;
-                       ta = localtime(&seconds);
+                       ta = php_localtime_r(&seconds,&tmbuf);
                }
 
                /*
Index: parsedate.y
===================================================================
RCS file: /repository/php-src/ext/standard/parsedate.y,v
retrieving revision 1.34.2.7
diff -u -r1.34.2.7 parsedate.y
--- parsedate.y 8 Apr 2004 19:21:46 -0000       1.34.2.7
+++ parsedate.y 25 Jun 2004 11:15:30 -0000
@@ -967,13 +967,13 @@
 
 time_t php_parse_date(char *p, time_t *now)
 {
-  struct tm tm, tm0, *tmp;
+  struct tm tm, tm0, *tmp, tmbuf;
   time_t Start;
   struct date_yy date;
 
   date.yyInput = p;
   Start = now ? *now : time ((time_t *) NULL);
-  tmp = localtime (&Start);
+  tmp = php_localtime_r (&Start, &tmbuf);
   if (!tmp)
     return -1;
   date.yyYear = tmp->tm_year + TM_YEAR_ORIGIN;
@@ -1072,7 +1072,8 @@
   if (date.yyHaveZone)
     {
       long delta;
-      struct tm *gmt = gmtime (&Start);
+      struct tm tmbuf;
+      struct tm *gmt = php_gmtime_r (&Start, &tmbuf);
       if (!gmt)
        return -1;
       delta = date.yyTimezone * 60L + difftm (&tm, gmt);

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to