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
52BEGIN_EXTERN_C()
53
54#if defined(HAVE_POSIX_READDIR_R)
55#define php_readdir_r readdir_r
56#else
57PHPAPI 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
63PHPAPI 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
67struct 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
74PHPAPI 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
78char *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
85PHPAPI 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
89char *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
96PHPAPI 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
100struct tm *php_gmtime_r(const time_t *const timep, struct tm *p_tm);
101#endif
102#endif
103
104#if !defined(HAVE_STRTOK_R)
105PHPAPI 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
109char *strtok_r(char *s, const char *delim, char **last);
110#endif
111#endif
112
113#if !defined(HAVE_RAND_R)
114PHPAPI int php_rand_r(unsigned int *seed);
115#else
116#define php_rand_r rand_r
117#endif
118
119END_EXTERN_C()
120
121#if !defined(ZTS)
122#undef PHP_NEED_REENTRANCY
123#endif
124
125#if defined(PHP_NEED_REENTRANCY)
126void reentrancy_startup(void);
127void reentrancy_shutdown(void);
128#else
129#define reentrancy_startup()
130#define reentrancy_shutdown()
131#endif
132
133#endif
134