From 9de9b7c1e9c3c2780e543272e421f36b5ac3486b Mon Sep 17 00:00:00 2001 From: Sascha Schumann Date: Thu, 3 May 2001 15:48:49 +0000 Subject: [PATCH] add an interface for registering storage modules at run-time. --- ext/session/mod_mm.c | 1 + ext/session/modules.c | 15 --------------- ext/session/php_session.h | 2 ++ ext/session/session.c | 31 +++++++++++++++++++++++++++---- 4 files changed, 30 insertions(+), 19 deletions(-) delete mode 100644 ext/session/modules.c diff --git a/ext/session/mod_mm.c b/ext/session/mod_mm.c index ba647f34e18..d6a20f9b382 100644 --- a/ext/session/mod_mm.c +++ b/ext/session/mod_mm.c @@ -211,6 +211,7 @@ PHP_GINIT_FUNCTION(ps_mm) ps_mm_instance = NULL; return FAILURE; } + php_session_register_module(&ps_mod_mm); return SUCCESS; } diff --git a/ext/session/modules.c b/ext/session/modules.c deleted file mode 100644 index f866a42333f..00000000000 --- a/ext/session/modules.c +++ /dev/null @@ -1,15 +0,0 @@ -/* - * To add a PHP session module, #include its header file and - * add a ps_xxx_ptr in the struct... - */ - -#include "mod_files.h" -#include "mod_mm.h" -#include "mod_user.h" - -static ps_module *ps_modules[] = { - ps_files_ptr, - ps_mm_ptr, - ps_user_ptr, -}; - diff --git a/ext/session/php_session.h b/ext/session/php_session.h index 874d5e27148..c11624cbbf5 100644 --- a/ext/session/php_session.h +++ b/ext/session/php_session.h @@ -169,6 +169,8 @@ void session_adapt_url(const char *, size_t, char **, size_t *); void php_set_session_var(char *name, size_t namelen, zval *state_val PSLS_DC); int php_get_session_var(char *name, size_t namelen, zval ***state_var PLS_DC PSLS_DC ELS_DC); +int php_session_register_module(ps_module *); + int php_session_register_serializer(const char *name, int (*encode)(PS_SERIALIZER_ENCODE_ARGS), int (*decode)(PS_SERIALIZER_DECODE_ARGS)); diff --git a/ext/session/session.c b/ext/session/session.c index f9e2c4d3aea..c55a12c3427 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -40,10 +40,11 @@ #include "ext/standard/php_rand.h" /* for RAND_MAX */ #include "ext/standard/info.h" -#include "modules.c" - #include "ext/standard/php_smart_str.h" +#include "mod_files.h" +#include "mod_user.h" + function_entry session_functions[] = { PHP_FE(session_name, NULL) PHP_FE(session_module_name, NULL) @@ -131,6 +132,13 @@ static ps_serializer ps_serializers[MAX_SERIALIZERS + 1] = { PS_SERIALIZER_ENTRY(php_binary) }; +#define MAX_MODULES 10 + +static ps_module *ps_modules[MAX_MODULES + 1] = { + ps_files_ptr, + ps_user_ptr +}; + int php_session_register_serializer(const char *name, int (*encode)(PS_SERIALIZER_ENCODE_ARGS), int (*decode)(PS_SERIALIZER_DECODE_ARGS)) @@ -152,6 +160,21 @@ int php_session_register_serializer(const char *name, return ret; } +int php_session_register_module(ps_module *ptr) +{ + int ret = -1; + int i; + + for (i = 0; i < MAX_MODULES; i++) { + if (!ps_modules[i]) { + ps_modules[i] = ptr; + ret = 0; + break; + } + } + + return ret; +} PHP_MINIT_FUNCTION(session); PHP_RINIT_FUNCTION(session); @@ -713,9 +736,9 @@ static ps_module *_php_find_ps_module(char *name PSLS_DC) { ps_module *ret = NULL; ps_module **mod; - ps_module **end = ps_modules + (sizeof(ps_modules)/sizeof(ps_module*)); + int i; - for (mod = ps_modules; mod < end; mod++) + for (i = 0, mod = ps_modules; i < MAX_MODULES; i++, mod++) if (*mod && !strcasecmp(name, (*mod)->name)) { ret = *mod; break;