1 /* 2 +----------------------------------------------------------------------+ 3 | Copyright (c) The PHP Group | 4 +----------------------------------------------------------------------+ 5 | This source file is subject to version 3.01 of the PHP license, | 6 | that is bundled with this package in the file LICENSE, and is | 7 | available through the world-wide-web at the following url: | 8 | https://www.php.net/license/3_01.txt | 9 | If you did not receive a copy of the PHP license and are unable to | 10 | obtain it through the world-wide-web, please send a note to | 11 | license@php.net so we can mail you a copy immediately. | 12 +----------------------------------------------------------------------+ 13 | Author: Sascha Schumann <sascha@schumann.cx> | 14 +----------------------------------------------------------------------+ 15 */ 16 17 #ifndef PHP_REENTRANCY_H 18 #define PHP_REENTRANCY_H 19 20 #include "php.h" 21 22 #include <sys/types.h> 23 #ifdef HAVE_DIRENT_H 24 #include <dirent.h> 25 #endif 26 #include <time.h> 27 28 /* currently, PHP does not check for these functions, but assumes 29 that they are available on all systems. */ 30 31 #define HAVE_LOCALTIME 1 32 #define HAVE_GMTIME 1 33 #define HAVE_ASCTIME 1 34 #define HAVE_CTIME 1 35 36 #if defined(PHP_IRIX_TIME_R) 37 #undef HAVE_ASCTIME_R 38 #undef HAVE_CTIME_R 39 #endif 40 41 #if defined(PHP_HPUX_TIME_R) 42 #undef HAVE_LOCALTIME_R 43 #undef HAVE_ASCTIME_R 44 #undef HAVE_CTIME_R 45 #undef HAVE_GMTIME_R 46 #endif 47 48 BEGIN_EXTERN_C() 49 50 #if !defined(HAVE_LOCALTIME_R) && defined(HAVE_LOCALTIME) 51 #define PHP_NEED_REENTRANCY 1 52 PHPAPI struct tm *php_localtime_r(const time_t *const timep, struct tm *p_tm); 53 #else 54 #define php_localtime_r localtime_r 55 #ifdef MISSING_LOCALTIME_R_DECL 56 struct tm *localtime_r(const time_t *const timep, struct tm *p_tm); 57 #endif 58 #endif 59 60 61 #if !defined(HAVE_CTIME_R) && defined(HAVE_CTIME) 62 #define PHP_NEED_REENTRANCY 1 63 PHPAPI char *php_ctime_r(const time_t *clock, char *buf); 64 #else 65 #define php_ctime_r ctime_r 66 #ifdef MISSING_CTIME_R_DECL 67 char *ctime_r(const time_t *clock, char *buf); 68 #endif 69 #endif 70 71 72 #if !defined(HAVE_ASCTIME_R) && defined(HAVE_ASCTIME) 73 #define PHP_NEED_REENTRANCY 1 74 PHPAPI char *php_asctime_r(const struct tm *tm, char *buf); 75 #else 76 #define php_asctime_r asctime_r 77 #ifdef MISSING_ASCTIME_R_DECL 78 char *asctime_r(const struct tm *tm, char *buf); 79 #endif 80 #endif 81 82 83 #if !defined(HAVE_GMTIME_R) && defined(HAVE_GMTIME) 84 #define PHP_NEED_REENTRANCY 1 85 PHPAPI struct tm *php_gmtime_r(const time_t *const timep, struct tm *p_tm); 86 #else 87 #define php_gmtime_r gmtime_r 88 #ifdef MISSING_GMTIME_R_DECL 89 struct tm *php_gmtime_r(const time_t *const timep, struct tm *p_tm); 90 #endif 91 #endif 92 93 #if !defined(HAVE_STRTOK_R) 94 PHPAPI char *php_strtok_r(char *s, const char *delim, char **last); 95 #else 96 #define php_strtok_r strtok_r 97 #ifdef MISSING_STRTOK_R_DECL 98 char *strtok_r(char *s, const char *delim, char **last); 99 #endif 100 #endif 101 102 END_EXTERN_C() 103 104 #if !defined(ZTS) 105 #undef PHP_NEED_REENTRANCY 106 #endif 107 108 #if defined(PHP_NEED_REENTRANCY) 109 void reentrancy_startup(void); 110 void reentrancy_shutdown(void); 111 #else 112 #define reentrancy_startup() 113 #define reentrancy_shutdown() 114 #endif 115 116 #endif 117