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