]> granicus.if.org Git - php/commitdiff
Fixed bug #77576 pull the libmagic implementation of gmtime_r
authorAnatol Belski <ab@php.net>
Fri, 8 Mar 2019 19:32:15 +0000 (20:32 +0100)
committerAnatol Belski <ab@php.net>
Fri, 8 Mar 2019 19:32:15 +0000 (20:32 +0100)
PHP already has all the checks to handle the *_r function variants.
Thus, reusing it to get right symbols.

ext/fileinfo/libmagic/cdf_time.c
ext/fileinfo/libmagic/print.c

index 795c843605f93a520e26da76c517b86bf5dc8228..bc1b99edaf191777cb404a94e73fc50819df0311 100644 (file)
@@ -23,6 +23,7 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
  */
+#include "php.h"
 
 #include "file.h"
 
@@ -152,7 +153,7 @@ cdf_timespec_to_timestamp(cdf_timestamp_t *t, const struct timespec *ts)
 #endif
 #ifdef notyet
        struct tm tm;
-       if (gmtime_r(&ts->ts_sec, &tm) == NULL) {
+       if (php_gmtime_r(&ts->ts_sec, &tm) == NULL) {
                errno = EINVAL;
                return -1;
        }
@@ -168,7 +169,7 @@ cdf_timespec_to_timestamp(cdf_timestamp_t *t, const struct timespec *ts)
 char *
 cdf_ctime(const time_t *sec, char *buf)
 {
-       char *ptr = ctime_r(sec, buf);
+       char *ptr = php_ctime_r(sec, buf);
        if (ptr != NULL)
                return buf;
        (void)snprintf(buf, 26, "*Bad* %#16.16" INT64_T_FORMAT "x\n",
index 9d0121b9089bc3c813d36595bfd004e27c543f9d..9102c55ec00b9ffb8139dcfafe174fb06ce9c38c 100644 (file)
@@ -28,7 +28,6 @@
 /*
  * print.c - debugging printout routines
  */
-#define _GNU_SOURCE
 #include "php.h"
 
 #include "file.h"
@@ -45,11 +44,6 @@ FILE_RCSID("@(#)$File: print.c,v 1.82 2017/02/10 18:14:01 christos Exp $")
 #endif
 #include <time.h>
 
-#ifdef PHP_WIN32
-# define asctime_r php_asctime_r
-# define ctime_r php_ctime_r
-#endif
-
 #define SZOF(a)        (sizeof(a) / sizeof(a[0]))
 
 #include "cdf.h"
@@ -240,8 +234,8 @@ protected const char *
 file_fmttime(uint64_t v, int flags, char *buf)
 {
        char *pp;
-       time_t t = (time_t)v;
-       struct tm *tm = NULL;
+       time_t t;
+       struct tm *tm, tmz;
 
        if (flags & FILE_T_WINDOWS) {
                struct timespec ts;
@@ -254,33 +248,13 @@ file_fmttime(uint64_t v, int flags, char *buf)
        }
 
        if (flags & FILE_T_LOCAL) {
-               pp = ctime_r(&t, buf);
+               tm = php_localtime_r(&t, &tmz);
        } else {
-#ifndef HAVE_DAYLIGHT
-               private int daylight = 0;
-#ifdef HAVE_TM_ISDST
-               private time_t now = (time_t)0;
-
-               if (now == (time_t)0) {
-                       struct tm *tm1;
-                       (void)time(&now);
-                       tm1 = localtime(&now);
-                       if (tm1 == NULL)
-                               goto out;
-                       daylight = tm1->tm_isdst;
-               }
-#endif /* HAVE_TM_ISDST */
-#endif /* HAVE_DAYLIGHT */
-               if (daylight)
-                       t += 3600;
-               tm = gmtime(&t);
-               if (tm == NULL)
-                       goto out;
-               pp = asctime_r(tm, buf);
+               tm = php_gmtime_r(&t, &tmz);
        }
        if (tm == NULL)
                goto out;
-       pp = asctime_r(tm, buf);
+       pp = php_asctime_r(tm, buf);
 
        if (pp == NULL)
                goto out;