Change reentrancy API to always use the php prefix.

Check for the declaration of reentrant functions, so that we can use
them in non-ZTS mode on all platforms.
This commit is contained in:
Sascha Schumann 2000-05-04 10:38:17 +00:00
parent b6e4841ec7
commit d0f3764ee2
16 changed files with 121 additions and 73 deletions

View File

@ -4,6 +4,36 @@ dnl This file contains local autoconf functions.
sinclude(dynlib.m4)
AC_DEFUN(PHP_MISSING_TIME_R_DECL,[
AC_MSG_CHECKING(for missing declarations of reentrant functions)
AC_TRY_COMPILE([#include <time.h>],[struct tm *(*func)() = localtime_r],[
:
],[
AC_DEFINE(MISSING_LOCALTIME_R_DECL,1,[Whether localtime_r is declared])
])
AC_TRY_COMPILE([#include <time.h>],[struct tm *(*func)() = gmtime_r],[
:
],[
AC_DEFINE(MISSING_GMTIME_R_DECL,1,[Whether gmtime_r is declared])
])
AC_TRY_COMPILE([#include <time.h>],[char *(*func)() = asctime_r],[
:
],[
AC_DEFINE(MISSING_ASCTIME_R_DECL,1,[Whether asctime_r is declared])
])
AC_TRY_COMPILE([#include <time.h>],[char *(*func)() = ctime_r],[
:
],[
AC_DEFINE(MISSING_CTIME_R_DECL,1,[Whether ctime_r is declared])
])
AC_TRY_COMPILE([#include <string.h>],[char *(*func)() = strtok_r],[
:
],[
AC_DEFINE(MISSING_STRTOK_R_DECL,1,[Whether strtok_r is declared])
])
AC_MSG_RESULT(done)
])
dnl
dnl PHP_LIBGCC_LIBPATH(gcc)
dnl Stores the location of libgcc in libgcc_libpath
@ -96,7 +126,7 @@ EOF
])
AC_DEFUN(PHP_TIME_R_TYPE,[
AC_CACHE_CHECK(for time_r type, ac_cv_time_r_type,[
AC_CACHE_CHECK(for *time_r type, ac_cv_time_r_type,[
AC_TRY_RUN([
#include <time.h>
#include <stdlib.h>

View File

@ -136,6 +136,7 @@ divert(3)
PHP_CONFIGURE_PART(Running system checks)
PHP_MISSING_TIME_R_DECL
dnl check for -R, etc. switch
AC_MSG_CHECKING(whether compiler supports -R)

View File

@ -45,7 +45,7 @@ PHP_FUNCTION(unixtojd)
t = time(NULL);
}
ta = localtime_r(&t, &tmbuf);
ta = php_localtime_r(&t, &tmbuf);
jdate = GregorianToSdn(ta->tm_year+1900, ta->tm_mon+1,ta->tm_mday);
RETURN_LONG(jdate);

View File

@ -223,13 +223,13 @@ PHP_FUNCTION(filepro)
}
/* Get the field count, assume the file is readable! */
if (strcmp(strtok_r(readbuf, ":", &strtok_buf), "map")) {
if (strcmp(php_strtok_r(readbuf, ":", &strtok_buf), "map")) {
php_error(E_WARNING, "filePro: map file corrupt or encrypted");
RETURN_FALSE;
}
FP_GLOBAL(fp_keysize) = atoi(strtok_r(NULL, ":", &strtok_buf));
strtok_r(NULL, ":", &strtok_buf);
FP_GLOBAL(fp_fcount) = atoi(strtok_r(NULL, ":", &strtok_buf));
FP_GLOBAL(fp_keysize) = atoi(php_strtok_r(NULL, ":", &strtok_buf));
php_strtok_r(NULL, ":", &strtok_buf);
FP_GLOBAL(fp_fcount) = atoi(php_strtok_r(NULL, ":", &strtok_buf));
/* Read in the fields themselves */
for (i = 0; i < FP_GLOBAL(fp_fcount); i++) {
@ -241,9 +241,9 @@ PHP_FUNCTION(filepro)
}
new_field = emalloc(sizeof(FP_FIELD));
new_field->next = NULL;
new_field->name = estrdup(strtok_r(readbuf, ":", &strtok_buf));
new_field->width = atoi(strtok_r(NULL, ":", &strtok_buf));
new_field->format = estrdup(strtok_r(NULL, ":", &strtok_buf));
new_field->name = estrdup(php_strtok_r(readbuf, ":", &strtok_buf));
new_field->width = atoi(php_strtok_r(NULL, ":", &strtok_buf));
new_field->format = estrdup(php_strtok_r(NULL, ":", &strtok_buf));
/* Store in forward-order to save time later */
if (!FP_GLOBAL(fp_fieldlist)) {

View File

@ -635,7 +635,7 @@ ftp_mdtm(ftpbuf_t *ftp, const char *path)
/* figure out the GMT offset */
stamp = time(NULL);
gmt = gmtime_r(&stamp, &tmbuf);
gmt = php_gmtime_r(&stamp, &tmbuf);
gmt->tm_isdst = -1;
/* apply the GMT offset */

View File

@ -316,7 +316,7 @@ int make2_return_array_from_objrec(pval **return_value, char *objrec, zval *sarr
to the return_value array.
*/
temp = estrdup(objrec);
attrname = strtok_r(temp, "\n", &strtok_buf);
attrname = php_strtok_r(temp, "\n", &strtok_buf);
while(attrname != NULL) {
zval *data, **dataptr;
long spec;
@ -372,7 +372,7 @@ int make2_return_array_from_objrec(pval **return_value, char *objrec, zval *sarr
}
}
attrname = strtok_r(NULL, "\n", &strtok_buf);
attrname = php_strtok_r(NULL, "\n", &strtok_buf);
}
if(NULL == sarr){
// spec_arr->refcount--;
@ -413,7 +413,7 @@ int make_return_array_from_objrec(pval **return_value, char *objrec) {
/* Fill Array of titles, descriptions and keywords */
temp = estrdup(objrec);
attrname = strtok_r(temp, "\n", &strtok_buf);
attrname = php_strtok_r(temp, "\n", &strtok_buf);
while(attrname != NULL) {
str = attrname;
iTitle = 0;
@ -468,7 +468,7 @@ int make_return_array_from_objrec(pval **return_value, char *objrec) {
if(iGroup)
add_next_index_string(group_arr, str, 1);
}
attrname = strtok_r(NULL, "\n", &strtok_buf);
attrname = php_strtok_r(NULL, "\n", &strtok_buf);
}
efree(temp);
@ -507,7 +507,7 @@ int make_return_array_from_objrec(pval **return_value, char *objrec) {
/* All other attributes. Make a another copy first */
temp = estrdup(objrec);
attrname = strtok_r(temp, "\n", &strtok_buf);
attrname = php_strtok_r(temp, "\n", &strtok_buf);
while(attrname != NULL) {
str = attrname;
/* We don't want to insert titles, descr., keywords a second time */
@ -521,7 +521,7 @@ int make_return_array_from_objrec(pval **return_value, char *objrec) {
str++;
add_assoc_string(*return_value, attrname, str, 1);
}
attrname = strtok_r(NULL, "\n", &strtok_buf);
attrname = php_strtok_r(NULL, "\n", &strtok_buf);
}
efree(temp);
@ -1171,7 +1171,7 @@ php_printf("%s\n", ptr);
}
temp = estrdup(ptr);
attrname = strtok_r(temp, "\n", &strtok_buf);
attrname = php_strtok_r(temp, "\n", &strtok_buf);
i = 0;
while(attrname != NULL) {
char *name;
@ -1245,7 +1245,7 @@ php_printf("%s\n", ptr);
/* Add the user array */
zend_hash_index_update(return_value->value.ht, i++, &user_arr, sizeof(pval), NULL);
attrname = strtok_r(NULL, "\n", &strtok_buf);
attrname = php_strtok_r(NULL, "\n", &strtok_buf);
}
efree(temp);
efree(object);

View File

@ -485,7 +485,7 @@ static void strcat_gmt(char *ubuf, time_t *when)
char buf[MAX_STR];
struct tm tm;
gmtime_r(when, &tm);
php_gmtime_r(when, &tm);
/* we know all components, thus it is safe to use sprintf */
sprintf(buf, "%s, %d %s %d %02d:%02d:%02d GMT", week_days[tm.tm_wday], tm.tm_mday, month_names[tm.tm_mon], tm.tm_year + 1900, tm.tm_hour, tm.tm_min, tm.tm_sec);

View File

@ -103,7 +103,7 @@ void php_mktime(INTERNAL_FUNCTION_PARAMETERS, int gm)
** default parameters for PHP gmmktime would be the current
** GMT time values...
*/
ta = localtime_r(&t, &tmbuf);
ta = php_localtime_r(&t, &tmbuf);
/* Let DST be unknown. mktime() should compute the right value
** and behave correctly. Unless the user overrides this.
@ -221,9 +221,9 @@ php_date(INTERNAL_FUNCTION_PARAMETERS, int gm)
convert_to_string_ex(format);
if (gm) {
ta = gmtime_r(&the_time, &tmbuf);
ta = php_gmtime_r(&the_time, &tmbuf);
} else {
ta = localtime_r(&the_time, &tmbuf);
ta = php_localtime_r(&the_time, &tmbuf);
}
if (!ta) { /* that really shouldn't happen... */
@ -489,7 +489,7 @@ PHP_FUNCTION(localtime)
assoc_array = (*assoc_array_arg)->value.lval;
break;
}
ta = localtime_r(&timestamp, &tmbuf);
ta = php_localtime_r(&timestamp, &tmbuf);
if (array_init(return_value) == FAILURE) {
php_error(E_ERROR, "Cannot prepare return array from localtime");
RETURN_FALSE;
@ -536,7 +536,7 @@ PHP_FUNCTION(getdate)
timestamp = (*timestamp_arg)->value.lval;
}
ta = localtime_r(&timestamp, &tmbuf);
ta = php_localtime_r(&timestamp, &tmbuf);
if (!ta) {
php_error(E_WARNING, "Cannot perform date calculation");
return;
@ -566,7 +566,7 @@ char *php_std_date(time_t t)
char *str;
PLS_FETCH();
tm1 = gmtime_r(&t, &tmbuf);
tm1 = php_gmtime_r(&t, &tmbuf);
str = emalloc(81);
if (PG(y2k_compliance)) {
snprintf(str, 80, "%s, %02d %s %04d %02d:%02d:%02d GMT",
@ -658,9 +658,9 @@ void _php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gm)
}
format = (*format_arg)->value.str.val;
if (gm) {
ta = gmtime_r(&timestamp, &tmbuf);
ta = php_gmtime_r(&timestamp, &tmbuf);
} else {
ta = localtime_r(&timestamp, &tmbuf);
ta = php_localtime_r(&timestamp, &tmbuf);
}
buf = (char *) emalloc(buf_len);

View File

@ -136,7 +136,7 @@ PHPAPI void php_print_info(int flag)
SLS_FETCH();
the_time = time(NULL);
ta = localtime_r(&the_time, &tmbuf);
ta = php_localtime_r(&the_time, &tmbuf);
if (flag & PHP_INFO_GENERAL) {
#ifdef PHP_WIN32

View File

@ -556,13 +556,13 @@ int GetTimeInfo(TIMEINFO *Now)
/* Now get the timezone if the last time < HH:00:00 <= now for some HH. */
if (NextHour <= Now->time) {
if ((tm = localtime_r(&Now->time, &tmbuf)) == NULL)
if ((tm = php_localtime_r(&Now->time, &tmbuf)) == NULL)
return -1;
secondsUntilNextHour = 60 * (60 - tm->tm_min) - tm->tm_sec;
#if !defined(HAVE_TM_GMTOFF)
/* To get the timezone, compare localtime with GMT. */
local = *tm;
if ((tm = gmtime_r(&Now->time, &tmbuf)) == NULL)
if ((tm = php_gmtime_r(&Now->time, &tmbuf)) == NULL)
return -1;
gmt = *tm;
@ -661,7 +661,7 @@ Convert(time_t Month, time_t Day, time_t Year, time_t Hours, time_t Minutes, tim
return -1;
Julian += tod;
tod = Julian;
if (dst == DSTon || (dst == DSTmaybe && localtime_r(&tod,&tmbuf)->tm_isdst))
if (dst == DSTon || (dst == DSTmaybe && php_localtime_r(&tod,&tmbuf)->tm_isdst))
Julian -= DST_OFFSET * 60 * 60;
return Julian;
}
@ -674,8 +674,8 @@ DSTcorrect(time_t Start, time_t Future)
time_t FutureDay;
struct tm tmbuf;
StartDay = (localtime_r(&Start,&tmbuf)->tm_hour + 1) % 24;
FutureDay = (localtime_r(&Future,&tmbuf)->tm_hour + 1) % 24;
StartDay = (php_localtime_r(&Start,&tmbuf)->tm_hour + 1) % 24;
FutureDay = (php_localtime_r(&Future,&tmbuf)->tm_hour + 1) % 24;
return (Future - Start) + (StartDay - FutureDay) * DST_OFFSET * 60 * 60;
}
@ -687,7 +687,7 @@ RelativeMonth(time_t Start, time_t RelMonth)
time_t Month;
time_t Year;
tm = localtime_r(&Start, &tmbuf);
tm = php_localtime_r(&Start, &tmbuf);
Month = 12 * tm->tm_year + tm->tm_mon + RelMonth;
Year = Month / 12;
Year += 1900;
@ -862,7 +862,7 @@ time_t parsedate(char *p, TIMEINFO *now)
(void)GetTimeInfo(&ti);
}
tm = localtime_r(&now->time, &tmbuf);
tm = php_localtime_r(&now->time, &tmbuf);
yyYear = tm->tm_year + 1900;
yyMonth = tm->tm_mon + 1;
yyDay = tm->tm_mday;

View File

@ -255,7 +255,7 @@ void php_log_err(char *log_message)
log_file = V_FOPEN(PG(error_log), "a");
if (log_file != NULL) {
time(&error_time);
strftime(error_time_str, 128, "%d-%b-%Y %H:%M:%S", localtime_r(&error_time, &tmbuf));
strftime(error_time_str, 128, "%d-%b-%Y %H:%M:%S", php_localtime_r(&error_time, &tmbuf));
fprintf(log_file, "[%s] ", error_time_str);
fprintf(log_file, log_message);
fprintf(log_file, "\n");
@ -626,8 +626,8 @@ static void php_message_handler_for_zend(long message, void *data)
SLS_FETCH();
time(&curtime);
ta = localtime_r(&curtime, &tmbuf);
datetime_str = asctime_r(ta, asctimebuf);
ta = php_localtime_r(&curtime, &tmbuf);
datetime_str = php_asctime_r(ta, asctimebuf);
datetime_str[strlen(datetime_str)-1]=0; /* get rid of the trailing newline */
fprintf(stderr, "[%s] Script: '%s'\n", datetime_str, SAFE_FILENAME(SG(request_info).path_translated));
}

View File

@ -42,39 +42,60 @@
#if !defined(HAVE_LOCALTIME_R) && defined(HAVE_LOCALTIME)
#define PHP_NEED_REENTRANCY 1
#define localtime_r php_localtime_r
PHPAPI struct tm *localtime_r(const time_t *const timep, struct tm *p_tm);
PHPAPI struct tm *php_localtime_r(const time_t *const timep, struct tm *p_tm);
#else
#define php_localtime_r localtime_r
#ifdef MISSING_LOCALTIME_R_DECL
struct tm *localtime_r(const time_t *const timep, struct tm *p_tm);
#endif
#endif
#if !defined(HAVE_CTIME_R) && defined(HAVE_CTIME)
#define PHP_NEED_REENTRANCY 1
#define ctime_r php_ctime_r
PHPAPI char *ctime_r(const time_t *clock, char *buf);
PHPAPI char *php_ctime_r(const time_t *clock, char *buf);
#else
#define php_ctime_r ctime_r
#ifdef MISSING_CTIME_R_DECL
char *ctime_r(const time_t *clock, char *buf);
#endif
#endif
#if !defined(HAVE_ASCTIME_R) && defined(HAVE_ASCTIME)
#define PHP_NEED_REENTRANCY 1
#define asctime_r php_asctime_r
PHPAPI char *asctime_r(const struct tm *tm, char *buf);
PHPAPI char *php_asctime_r(const struct tm *tm, char *buf);
#else
#define php_asctime_r asctime_r
#ifdef MISSING_ASCTIME_R_DECL
char *asctime_r(const struct tm *tm, char *buf);
#endif
#endif
#if !defined(HAVE_GMTIME_R) && defined(HAVE_GMTIME)
#define PHP_NEED_REENTRANCY 1
#define gmtime_r php_gmtime_r
PHPAPI struct tm *gmtime_r(const time_t *const timep, struct tm *p_tm);
PHPAPI struct tm *php_gmtime_r(const time_t *const timep, struct tm *p_tm);
#else
#define php_gmtime_r gmtime_r
#ifdef MISSING_GMTIME_R_DECL
struct tm *php_gmtime_r(const time_t *const timep, struct tm *p_tm);
#endif
#endif
#if !defined(HAVE_STRTOK_R)
#define strtok_r php_strtok_r
PHPAPI char *strtok_r(char *s, const char *delim, char **last);
PHPAPI char *php_strtok_r(char *s, const char *delim, char **last);
#else
#define php_strtok_r strtok_r
#ifdef MISSING_STRTOK_R_DECL
char *strtok_r(char *s, const char *delim, char **last);
#endif
#endif
#if !defined(HAVE_RAND_R)
#define rand_r php_rand_r
PHPAPI int rand_r(unsigned int *seed);
PHPAPI int php_rand_r(unsigned int *seed);
#else
#define php_rand_r rand_r
#endif
#if !defined(ZTS)

View File

@ -192,7 +192,7 @@ SAPI_POST_HANDLER_FUNC(php_std_post_handler)
ELS_FETCH();
PLS_FETCH();
var = strtok_r(SG(request_info).post_data, "&", &strtok_buf);
var = php_strtok_r(SG(request_info).post_data, "&", &strtok_buf);
while (var) {
val = strchr(var, '=');
@ -203,7 +203,7 @@ SAPI_POST_HANDLER_FUNC(php_std_post_handler)
php_url_decode(val, strlen(val));
php_register_variable(var, val, array_ptr ELS_CC PLS_CC);
}
var = strtok_r(NULL, "&", &strtok_buf);
var = php_strtok_r(NULL, "&", &strtok_buf);
}
}
@ -274,11 +274,11 @@ void php_treat_data(int arg, char *str ELS_DC PLS_DC SLS_DC)
}
if (arg == PARSE_COOKIE) {
var = strtok_r(res, ";", &strtok_buf);
var = php_strtok_r(res, ";", &strtok_buf);
} else if (arg == PARSE_POST) {
var = strtok_r(res, "&", &strtok_buf);
var = php_strtok_r(res, "&", &strtok_buf);
} else {
var = strtok_r(res, PG(arg_separator), &strtok_buf);
var = php_strtok_r(res, PG(arg_separator), &strtok_buf);
}
while (var) {
@ -291,9 +291,9 @@ void php_treat_data(int arg, char *str ELS_DC PLS_DC SLS_DC)
php_register_variable(var, val, array_ptr ELS_CC PLS_CC);
}
if (arg == PARSE_COOKIE) {
var = strtok_r(NULL, ";", &strtok_buf);
var = php_strtok_r(NULL, ";", &strtok_buf);
} else {
var = strtok_r(NULL, PG(arg_separator), &strtok_buf);
var = php_strtok_r(NULL, PG(arg_separator), &strtok_buf);
}
}
if (free_buffer) {

View File

@ -48,33 +48,29 @@ static MUTEX_T reentrant_locks[NUMBER_OF_LOCKS];
#if defined(PHP_HPUX_TIME_R)
PHPAPI struct tm *localtime_r(const time_t *const timep, struct tm *p_tm)
PHPAPI struct tm *php_localtime_r(const time_t *const timep, struct tm *p_tm)
{
#undef localtime_r
if (localtime_r(timep, p_tm) == 0)
return (p_tm);
return (NULL);
}
PHPAPI char *ctime_r(const time_t *clock, char *buf)
PHPAPI char *php_ctime_r(const time_t *clock, char *buf)
{
#undef ctime_r
if (ctime_r(clock, buf, 26) != -1)
return (buf);
return (NULL);
}
PHPAPI char *asctime_r(const struct tm *tm, char *buf)
PHPAPI char *php_asctime_r(const struct tm *tm, char *buf)
{
#undef asctime_r
if (asctime_r(tm, buf, 26) != -1)
return (buf);
return (NULL);
}
PHPAPI struct tm *gmtime_r(const time_t *const timep, struct tm *p_tm)
PHPAPI struct tm *php_gmtime_r(const time_t *const timep, struct tm *p_tm)
{
#undef gmtime_r
if (gmtime_r(timep, p_tm) == 0)
return (p_tm);
return (NULL);
@ -123,7 +119,7 @@ PHPAPI char *ctime_r(const time_t *clock, char *buf)
#if !defined(HAVE_ASCTIME_R) && defined(HAVE_ASCTIME)
PHPAPI char *asctime_r(const struct tm *tm, char *buf)
PHPAPI char *php_asctime_r(const struct tm *tm, char *buf)
{
char *tmp;
@ -141,7 +137,7 @@ PHPAPI char *asctime_r(const struct tm *tm, char *buf)
#if !defined(HAVE_GMTIME_R) && defined(HAVE_GMTIME)
PHPAPI struct tm *gmtime_r(const time_t *const timep, struct tm *p_tm)
PHPAPI struct tm *php_gmtime_r(const time_t *const timep, struct tm *p_tm)
{
struct tm *tmp;
@ -227,7 +223,7 @@ do_rand(unsigned long *ctx)
PHPAPI int
rand_r(unsigned int *ctx)
php_rand_r(unsigned int *ctx)
{
u_long val = (u_long) *ctx;
*ctx = do_rand(&val);
@ -285,7 +281,7 @@ rand_r(unsigned int *ctx)
#include <stddef.h>
PHPAPI char *
strtok_r(char *s, const char *delim, char **last)
php_strtok_r(char *s, const char *delim, char **last)
{
char *spanp;
int c, sc;

View File

@ -356,7 +356,7 @@ static void sapi_isapi_register_server_variables(zval *track_vars_array ELS_DC S
return;
}
}
variable = strtok_r(variable_buf, "\r\n", &strtok_buf);
variable = php_strtok_r(variable_buf, "\r\n", &strtok_buf);
while (variable) {
char *colon = strchr(variable, ':');
@ -370,7 +370,7 @@ static void sapi_isapi_register_server_variables(zval *track_vars_array ELS_DC S
php_register_variable(variable, value, track_vars_array ELS_CC PLS_CC);
*colon = ':';
}
variable = strtok_r(NULL, "\r\n", &strtok_buf);
variable = php_strtok_r(NULL, "\r\n", &strtok_buf);
}
if (variable_buf!=static_variable_buf) {
efree(variable_buf);

View File

@ -49,7 +49,7 @@ void UpdateIniFromRegistry(char *path)
}
path = p = strtok_r(path, "\\/", &strtok_buf);
path = p = php_strtok_r(path, "\\/", &strtok_buf);
while (p) {
HKEY hKey;
@ -73,7 +73,7 @@ void UpdateIniFromRegistry(char *path)
}
RegCloseKey(hKey);
p = strtok_r(NULL, "\\/", &strtok_buf);
p = php_strtok_r(NULL, "\\/", &strtok_buf);
}
RegCloseKey(MainKey);
efree(orig_path);