Browse Source

Removed remaining PHP_31 defines.

First try with ZTS support, can someone with a working ZTS enabled setup test this, please?
experimetnal/RETURN_REF_PATCH
Stefan Roehrich 27 years ago
parent
commit
e4b7bf4ae8
  1. 14
      ext/zlib/php3_zlib.h
  2. 161
      ext/zlib/zlib.c

14
ext/zlib/php3_zlib.h

@ -35,6 +35,10 @@
#if HAVE_ZLIB
typedef struct {
int gzgetss_state;
} php_zlib_globals;
extern php3_module_entry php3_zlib_module_entry;
#define zlib_module_ptr &php3_zlib_module_entry
@ -56,6 +60,16 @@ PHP_FUNCTION(gzpassthru);
PHP_FUNCTION(readgzfile);
PHP_FUNCTION(gzfile);
#ifdef ZTS
#define ZLIBLS_D php_zlib_globals *zlib_globals
#define ZLIBG(v) (zlib_globals->v)
#define ZLIBLS_FETCH() php_zlib_globals *zlib_globals = ts_resource(zlib_globals_id)
#else
#define ZLIBLS_D
#define ZLIBG(v) (zlib_globals.v)
#define ZLIBLS_FETCH()
#endif
#else
#define zlib_module_ptr NULL
#endif /* HAVE_ZLIB */

161
ext/zlib/zlib.c

@ -17,9 +17,6 @@
+----------------------------------------------------------------------+
*/
/* $Id$ */
#if !PHP_31 && defined(THREAD_SAFE)
#undef THREAD_SAFE
#endif
#define IS_EXT_MODULE
#include "php.h"
@ -34,11 +31,7 @@
#include <windows.h>
#include <winsock.h>
#define O_RDONLY _O_RDONLY
#if PHP_31
#include "os/nt/param.h"
#else
#include "win32/param.h"
#endif
#else
#include <sys/param.h>
/* #include <sys/uio.h> */
@ -64,11 +57,7 @@
#include <zlib.h>
#if COMPILE_DL
#if PHP_31
#include "ext/phpdl.h"
#else
#include "dl/phpdl.h"
#endif
#ifndef PUTS
#define PUTS(a) php_printf("%s",a)
#endif
@ -80,30 +69,15 @@
#endif
#endif
#if defined(THREAD_SAFE)
typedef struct zlib_global_struct{
#endif
int gzgetss_state;
int le_zp;
#if defined(THREAD_SAFE)
}zlib_global_struct;
#ifdef ZTS
int zlib_globals_id;
#else
static php_zlib_globals zlib_globals;
#endif
#if defined(THREAD_SAFE)
DWORD ZLIBtls;
static int numthreads=0;
void *zlib_mutex;
#define ZLIB_GLOBAL(a) zlib_globals->a
#define ZLIB_TLS_VARS zlib_global_struct *PHP3_TLS_GET(ZLIBtls,zlib_globals);
#else
#define ZLIB_GLOBAL(a) a
#define ZLIB_TLS_VARS
#endif
/* True globals, no need for thread safety */
static int le_zp;
function_entry php3_zlib_functions[] = {
PHP_FE(readgzfile, NULL)
@ -143,45 +117,26 @@ static void phpi_destructor_gzclose(gzFile *zp) {
(void)gzclose(zp);
}
#ifdef ZTS
static void php_zlib_init_globals(ZLIBLS_D)
{
ZLIBG(gzgetss_state) = 0;
}
#endif
PHP_MINIT_FUNCTION(zlib)
{
#ifdef THREAD_SAFE
zlib_global_struct *zlib_globals;
PHP3_MUTEX_ALLOC(zlib_mutex);
PHP3_MUTEX_LOCK(zlib_mutex);
numthreads++;
if (numthreads==1){
if (!PHP3_TLS_PROC_STARTUP(ZLIBtls)){
PHP3_MUTEX_UNLOCK(zlib_mutex);
PHP3_MUTEX_FREE(zlib_mutex);
return FAILURE;
}
}
PHP3_MUTEX_UNLOCK(zlib_mutex);
if(!PHP3_TLS_THREAD_INIT(ZLIBtls,zlib_globals,zlib_global_struct)){
PHP3_MUTEX_FREE(zlib_mutex);
return FAILURE;
}
#ifdef ZTS
zlib_globals_id = ts_allocate_id(sizeof(php_zlib_globals), php_zlib_init_globals, NULL);
#else
ZLIBG(gzgetss_state)=0;
#endif
ZLIB_GLOBAL(le_zp) = register_list_destructors(phpi_destructor_gzclose,NULL);
le_zp = register_list_destructors(phpi_destructor_gzclose,NULL);
return SUCCESS;
}
PHP_MSHUTDOWN_FUNCTION(zlib)
{
#if defined(THREAD_SAFE)
ZLIB_TLS_VARS;
PHP3_TLS_THREAD_FREE(zlib_globals);
PHP3_MUTEX_LOCK(zlib_mutex);
numthreads--;
if (numthreads<1){
PHP3_TLS_PROC_SHUTDOWN(ZLIBtls);
PHP3_MUTEX_UNLOCK(zlib_mutex);
PHP3_MUTEX_FREE(zlib_mutex);
return SUCCESS;
}
PHP3_MUTEX_UNLOCK(zlib_mutex);
#endif
return SUCCESS;
}
@ -198,7 +153,8 @@ static gzFile *php3_gzopen_with_path(char *filename, char *mode, char *path, cha
static gzFile php3_gzopen_wrapper(char *path, char *mode, int options)
{
ZLIB_TLS_VARS;
PLS_FETCH();
if (options & USE_PATH && PG(include_path) != NULL) {
return php3_gzopen_with_path(path, mode, PG(include_path), NULL);
}
@ -221,7 +177,7 @@ static gzFile *php3_gzopen_with_path(char *filename, char *mode, char *path, cha
char trypath[MAXPATHLEN + 1];
struct stat sb;
gzFile *zp;
ZLIB_TLS_VARS;
PLS_FETCH();
if (opened_path) {
*opened_path = NULL;
@ -322,7 +278,7 @@ PHP_FUNCTION(gzfile) {
char *slashed, buf[8192];
register int i=0;
int use_include_path = 0;
ZLIB_TLS_VARS;
PLS_FETCH();
/* check args */
switch (ARG_COUNT(ht)) {
@ -377,7 +333,7 @@ PHP_FUNCTION(gzopen) {
gzFile *zp;
char *p;
int use_include_path = 0;
ZLIB_TLS_VARS;
ZLIBLS_FETCH();
switch(ARG_COUNT(ht)) {
case 2:
@ -410,9 +366,9 @@ PHP_FUNCTION(gzopen) {
efree(p);
RETURN_FALSE;
}
ZLIB_GLOBAL(gzgetss_state)=0;
ZLIBG(gzgetss_state)=0;
efree(p);
ZEND_REGISTER_RESOURCE(return_value, zp, ZLIB_GLOBAL(le_zp));
ZEND_REGISTER_RESOURCE(return_value, zp, le_zp);
}
/* }}} */
@ -421,12 +377,11 @@ Close an open .gz-file pointer */
PHP_FUNCTION(gzclose) {
pval *arg1;
gzFile *zp;
ZLIB_TLS_VARS;
if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(zp, gzFile *, arg1, -1, "Zlib file", ZLIB_GLOBAL(le_zp));
ZEND_FETCH_RESOURCE(zp, gzFile *, arg1, -1, "Zlib file", le_zp);
zend_list_delete(arg1->value.lval);
RETURN_TRUE;
}
@ -437,12 +392,11 @@ Test for end-of-file on a .gz-file pointer */
PHP_FUNCTION(gzeof) {
pval *arg1;
gzFile *zp;
ZLIB_TLS_VARS;
if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(zp, gzFile *, arg1, -1, "Zlib file", ZLIB_GLOBAL(le_zp));
ZEND_FETCH_RESOURCE(zp, gzFile *, arg1, -1, "Zlib file", le_zp);
if ((gzeof(zp))) {
RETURN_TRUE;
@ -459,7 +413,7 @@ PHP_FUNCTION(gzgets) {
gzFile *zp;
int len;
char *buf;
ZLIB_TLS_VARS;
PLS_FETCH();
if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
@ -467,7 +421,7 @@ PHP_FUNCTION(gzgets) {
convert_to_long(arg2);
len = arg2->value.lval;
ZEND_FETCH_RESOURCE(zp, gzFile *, arg1, -1, "Zlib file", ZLIB_GLOBAL(le_zp));
ZEND_FETCH_RESOURCE(zp, gzFile *, arg1, -1, "Zlib file", le_zp);
buf = emalloc(sizeof(char) * (len + 1));
/* needed because recv doesnt put a null at the end*/
@ -495,13 +449,12 @@ PHP_FUNCTION(gzgetc) {
gzFile *zp;
int c;
char *buf;
ZLIB_TLS_VARS;
if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(zp, gzFile *, arg1, -1, "Zlib file", ZLIB_GLOBAL(le_zp));
ZEND_FETCH_RESOURCE(zp, gzFile *, arg1, -1, "Zlib file", le_zp);
buf = emalloc(sizeof(char) * 2);
if ((c=gzgetc(zp)) == (-1)) {
@ -527,7 +480,7 @@ PHP_FUNCTION(gzgetss)
gzFile *zp;
int len, br;
char *buf, *p, *rbuf, *rp, c, lc;
ZLIB_TLS_VARS;
ZLIBLS_FETCH();
if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &fd, &bytes) == FAILURE) {
WRONG_PARAM_COUNT;
@ -537,7 +490,7 @@ PHP_FUNCTION(gzgetss)
len = bytes->value.lval;
ZEND_FETCH_RESOURCE(zp, gzFile *, fd, -1, "Zlib file", ZLIB_GLOBAL(le_zp));
ZEND_FETCH_RESOURCE(zp, gzFile *, fd, -1, "Zlib file", le_zp);
buf = emalloc(sizeof(char) * (len + 1));
/*needed because recv doesnt set null char at end*/
@ -557,67 +510,67 @@ PHP_FUNCTION(gzgetss)
while (c) {
switch (c) {
case '<':
if (ZLIB_GLOBAL(gzgetss_state) == 0) {
if (ZLIBG(gzgetss_state) == 0) {
lc = '<';
ZLIB_GLOBAL(gzgetss_state) = 1;
ZLIBG(gzgetss_state) = 1;
}
break;
case '(':
if (ZLIB_GLOBAL(gzgetss_state) == 2) {
if (ZLIBG(gzgetss_state) == 2) {
if (lc != '\"') {
lc = '(';
br++;
}
} else if (ZLIB_GLOBAL(gzgetss_state) == 0) {
} else if (ZLIBG(gzgetss_state) == 0) {
*(rp++) = c;
}
break;
case ')':
if (ZLIB_GLOBAL(gzgetss_state) == 2) {
if (ZLIBG(gzgetss_state) == 2) {
if (lc != '\"') {
lc = ')';
br--;
}
} else if (ZLIB_GLOBAL(gzgetss_state) == 0) {
} else if (ZLIBG(gzgetss_state) == 0) {
*(rp++) = c;
}
break;
case '>':
if (ZLIB_GLOBAL(gzgetss_state) == 1) {
if (ZLIBG(gzgetss_state) == 1) {
lc = '>';
ZLIB_GLOBAL(gzgetss_state) = 0;
} else if (ZLIB_GLOBAL(gzgetss_state) == 2) {
ZLIBG(gzgetss_state) = 0;
} else if (ZLIBG(gzgetss_state) == 2) {
if (!br && lc != '\"') {
ZLIB_GLOBAL(gzgetss_state) = 0;
ZLIBG(gzgetss_state) = 0;
}
}
break;
case '\"':
if (ZLIB_GLOBAL(gzgetss_state) == 2) {
if (ZLIBG(gzgetss_state) == 2) {
if (lc == '\"') {
lc = '\0';
} else if (lc != '\\') {
lc = '\"';
}
} else if (ZLIB_GLOBAL(gzgetss_state) == 0) {
} else if (ZLIBG(gzgetss_state) == 0) {
*(rp++) = c;
}
break;
case '?':
if (ZLIB_GLOBAL(gzgetss_state)==1) {
if (ZLIBG(gzgetss_state)==1) {
br=0;
ZLIB_GLOBAL(gzgetss_state)=2;
ZLIBG(gzgetss_state)=2;
break;
}
/* fall-through */
default:
if (ZLIB_GLOBAL(gzgetss_state) == 0) {
if (ZLIBG(gzgetss_state) == 0) {
*(rp++) = c;
}
}
@ -637,7 +590,7 @@ PHP_FUNCTION(gzwrite) {
gzFile *zp;
int ret;
int num_bytes;
ZLIB_TLS_VARS;
PLS_FETCH();
switch (ARG_COUNT(ht)) {
case 2:
@ -660,7 +613,7 @@ PHP_FUNCTION(gzwrite) {
/* NOTREACHED */
break;
}
ZEND_FETCH_RESOURCE(zp, gzFile *, arg1, -1, "Zlib file", ZLIB_GLOBAL(le_zp));
ZEND_FETCH_RESOURCE(zp, gzFile *, arg1, -1, "Zlib file", le_zp);
/* strip slashes only if the length wasn't specified explicitly */
if (!arg3 && PG(magic_quotes_runtime)) {
@ -681,13 +634,12 @@ Rewind the position of a .gz-file pointer */
PHP_FUNCTION(gzrewind) {
pval *arg1;
gzFile *zp;
ZLIB_TLS_VARS;
if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(zp, gzFile *, arg1, -1, "Zlib file", ZLIB_GLOBAL(le_zp));
ZEND_FETCH_RESOURCE(zp, gzFile *, arg1, -1, "Zlib file", le_zp);
gzrewind(zp);
RETURN_TRUE;
@ -700,13 +652,12 @@ PHP_FUNCTION(gztell) {
pval *arg1;
long pos;
gzFile *zp;
ZLIB_TLS_VARS;
if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(zp, gzFile *, arg1, -1, "Zlib file", ZLIB_GLOBAL(le_zp));
ZEND_FETCH_RESOURCE(zp, gzFile *, arg1, -1, "Zlib file", le_zp);
pos = gztell(zp);
RETURN_LONG(pos);
@ -720,7 +671,6 @@ PHP_FUNCTION(gzseek) {
int ret;
long pos;
gzFile *zp;
ZLIB_TLS_VARS;
if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
@ -728,7 +678,7 @@ PHP_FUNCTION(gzseek) {
convert_to_long(arg2);
pos = arg2->value.lval;
ZEND_FETCH_RESOURCE(zp, gzFile *, arg1, -1, "Zlib file", ZLIB_GLOBAL(le_zp));
ZEND_FETCH_RESOURCE(zp, gzFile *, arg1, -1, "Zlib file", le_zp);
ret = gzseek(zp,pos,SEEK_SET);
RETURN_LONG(ret);
@ -796,13 +746,12 @@ PHP_FUNCTION(gzpassthru) {
gzFile *zp;
char buf[8192];
int size, b;
ZLIB_TLS_VARS;
if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(zp, gzFile *, arg1, -1, "Zlib file", ZLIB_GLOBAL(le_zp));
ZEND_FETCH_RESOURCE(zp, gzFile *, arg1, -1, "Zlib file", le_zp);
size = 0;
while((b = gzread(zp, buf, sizeof(buf))) > 0) {
@ -822,7 +771,7 @@ PHP_FUNCTION(gzread)
pval *arg1, *arg2;
gzFile *zp;
int len;
ZLIB_TLS_VARS;
PLS_FETCH();
if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &arg1, &arg2) == FAILURE) {
WRONG_PARAM_COUNT;
@ -830,7 +779,7 @@ PHP_FUNCTION(gzread)
convert_to_long(arg2);
len = arg2->value.lval;
ZEND_FETCH_RESOURCE(zp, gzFile *, arg1, -1, "Zlib file", ZLIB_GLOBAL(le_zp));
ZEND_FETCH_RESOURCE(zp, gzFile *, arg1, -1, "Zlib file", le_zp);
return_value->value.str.val = emalloc(sizeof(char) * (len + 1));
/* needed because recv doesnt put a null at the end*/

Loading…
Cancel
Save