Re: zend module patch

From: Date: Wed, 10 Oct 2001 16:47:48 +0000
Subject: Re: zend module patch
References: 1 2  Groups: php.dev 
Request: Send a blank email to php-dev+get-67695@lists.php.net to get a copy of this message
Okay, I'll start implementing it for php4 and all bundled extensions then. But IMHO this _really_ gives us an excuse to go straight to 4.1 in this release instead of 4.0.7. - Stig Zeev Suraski wrote: > > The patch looks good. I suggest adding sizeof(zend_module_entry) to be the > first element in this structure, so that in the future, we can offer > downwards compatibility in the future. > > Zeev > > At 02:29 10-10-01, Stig S. Bakken wrote: > >Stig Sæther Bakken wrote: > > > > > > Hi, > > > > > > A while ago, we discussed being able to give more intelligent error > > > messages when loading extensions compiled with different > > > configurations/API versions. > > > > > > Attached is a patch that changes the zend_module_entry type so the > > > configuration appears first. This way PHP can give more sensible > > > error messages like "I need thread-safe extensions" or "sorry, this > > > extension was built in debug mode". > > > > > > The patch also adds a "version" field to the struct, along with a > > > zend_get_module_version Zend API function and an optional parameter to > > > phpversion() for getting the version of a loaded extension. > > > > > > The downside is that moving zend_module_entry's configuration fields > > > first can't be done in a backwards-compatible way. This patch breaks > > > every extension out there (except ext/standard, which is updated), but > > > it does buy us better BC possibilities in the future. > > > > > > Comments, opinions? > > > > > > - Stig > > > >Now where did that attachment go? Sigh, here it is inlined: > > > >Index: ext/standard/basic_functions.c > >=================================================================== > >RCS file: /repository/php4/ext/standard/basic_functions.c,v > >retrieving revision 1.404 > >diff -u -b -B -r1.404 basic_functions.c > >--- ext/standard/basic_functions.c 5 Oct 2001 23:56:19 -0000 1.404 > >+++ ext/standard/basic_functions.c 10 Oct 2001 00:02:08 -0000 > >@@ -830,6 +830,7 @@ > > > > > > zend_module_entry basic_functions_module = { > >+ STANDARD_MODULE_HEADER, > > "standard", /* extension name */ > > basic_functions, /* function list */ > > PHP_MINIT(basic), /* process startup */ > >@@ -837,6 +838,7 @@ > > PHP_RINIT(basic), /* request startup */ > > PHP_RSHUTDOWN(basic), /* request shutdown */ > > PHP_MINFO(basic), /* extension info */ > >+ PHP_VERSION, /* extension version */ > > STANDARD_MODULE_PROPERTIES > > }; > > > >Index: ext/standard/info.c > >=================================================================== > >RCS file: /repository/php4/ext/standard/info.c,v > >retrieving revision 1.158 > >diff -u -b -B -r1.158 info.c > >--- ext/standard/info.c 6 Oct 2001 20:13:37 -0000 1.158 > >+++ ext/standard/info.c 10 Oct 2001 00:02:09 -0000 > >@@ -473,15 +473,26 @@ > > > > /* }}} */ > > > >-/* {{{ proto string phpversion(void) > >+/* {{{ proto string phpversion([string extension]) > > Return the current PHP version */ > > PHP_FUNCTION(phpversion) > > { > >- if (ZEND_NUM_ARGS() != 0) { > >- WRONG_PARAM_COUNT; > >- } > >+ zval **arg; > >+ int argc = ZEND_NUM_ARGS(); > > > >+ if (argc == 0) { > > RETURN_STRING(PHP_VERSION, 1); > >+ } else if (argc == 1 && zend_get_parameters_ex(1, &arg) == SUCCESS) { > >+ char *version; > >+ convert_to_string_ex(arg); > >+ version = zend_get_module_version(Z_STRVAL_PP(arg)); > >+ if (version == NULL) { > >+ RETURN_FALSE; > >+ } > >+ RETURN_STRING(version, 1); > >+ } else { > >+ WRONG_PARAM_COUNT; > >+ } > > } > > /* }}} */ > > > >Index: Zend/zend_API.c > >=================================================================== > >RCS file: /repository/Zend/zend_API.c,v > >retrieving revision 1.100 > >diff -u -b -B -r1.100 zend_API.c > >--- Zend/zend_API.c 2001/08/24 03:18:44 1.100 > >+++ Zend/zend_API.c 2001/10/10 00:02:15 > >@@ -1385,3 +1385,14 @@ > > > > return retval; > > } > >+ > >+ZEND_API char *zend_get_module_version(char *module_name) > >+{ > >+ zend_module_entry *module; > >+ > >+ if (zend_hash_find(&module_registry, module_name, strlen(module_name) > >+ 1, > >+ (void**)&module) == FAILURE) { > >+ return NULL; > >+ } > >+ return module->version; > >+} > >Index: Zend/zend_API.h > >=================================================================== > >RCS file: /repository/Zend/zend_API.h,v > >retrieving revision 1.107 > >diff -u -b -B -r1.107 zend_API.h > >--- Zend/zend_API.h 2001/08/12 14:50:14 1.107 > >+++ Zend/zend_API.h 2001/10/10 00:02:16 > >@@ -137,6 +137,7 @@ > > > > ZEND_API void zend_wrong_param_count(TSRMLS_D); > > ZEND_API zend_bool zend_is_callable(zval *callable, zend_bool > >syntax_only, char **callable_name); > >+ZEND_API char *zend_get_module_version(char *module_name); > > > > #define getThis() (this_ptr) > > > >Index: Zend/zend_modules.h > >=================================================================== > >RCS file: /repository/Zend/zend_modules.h,v > >retrieving revision 1.40 > >diff -u -b -B -r1.40 zend_modules.h > >--- Zend/zend_modules.h 2001/09/01 12:57:50 1.40 > >+++ Zend/zend_modules.h 2001/10/10 00:02:16 > >@@ -43,8 +43,10 @@ > > #define USING_ZTS 0 > > #endif > > > >-#define STANDARD_MODULE_PROPERTIES_EX 0, 0, 0, NULL, 0, ZEND_DEBUG, > >USING_ZTS, ZEND_MODULE_API_NO > >+#define STANDARD_MODULE_HEADER ZEND_MODULE_API_NO, ZEND_DEBUG, > >USING_ZTS > > > >+#define STANDARD_MODULE_PROPERTIES_EX 0, 0, 0, NULL, 0 > >+ > > #define STANDARD_MODULE_PROPERTIES \ > > NULL, NULL, STANDARD_MODULE_PROPERTIES_EX > > > >@@ -54,6 +56,9 @@ > > typedef struct _zend_module_entry zend_module_entry; > > > > struct _zend_module_entry { > >+ unsigned int zend_api; > >+ unsigned char zend_debug; > >+ unsigned char zts; > > char *name; > > zend_function_entry *functions; > > int (*module_startup_func)(INIT_FUNC_ARGS); > >@@ -61,6 +66,7 @@ > > int (*request_startup_func)(INIT_FUNC_ARGS); > > int (*request_shutdown_func)(SHUTDOWN_FUNC_ARGS); > > void (*info_func)(ZEND_MODULE_INFO_FUNC_ARGS); > >+ char *version; > > int (*global_startup_func)(void); > > int (*global_shutdown_func)(void); > > int globals_id; > >@@ -68,9 +74,6 @@ > > unsigned char type; > > void *handle; > > int module_number; > >- unsigned char zend_debug; > >- unsigned char zts; > >- unsigned int zend_api; > > }; > > > >-- > >PHP Development Mailing List <http://www.php.net/> > >To unsubscribe, e-mail: php-dev-unsubscribe@lists.php.net > >For additional commands, e-mail: php-dev-help@lists.php.net > >To contact the list administrators, e-mail: php-list-admin@lists.php.net > > -- > PHP Development Mailing List <http://www.php.net/> > To unsubscribe, e-mail: php-dev-unsubscribe@lists.php.net > For additional commands, e-mail: php-dev-help@lists.php.net > To contact the list administrators, e-mail: php-list-admin@lists.php.net

« previous php.dev (#67695) next »