diff options
| author | Sascha Schumann <sas@php.net> | 2001-05-03 15:48:49 +0000 |
|---|---|---|
| committer | Sascha Schumann <sas@php.net> | 2001-05-03 15:48:49 +0000 |
| commit | 9de9b7c1e9c3c2780e543272e421f36b5ac3486b (patch) | |
| tree | b04c455ddc187e0c985c0a515c5f7ca4807e4cd0 /ext/session/session.c | |
| parent | 172a9c93031a21c19ad035df210c2b76e517bb88 (diff) | |
| download | php-git-9de9b7c1e9c3c2780e543272e421f36b5ac3486b.tar.gz | |
add an interface for registering storage modules at run-time.
Diffstat (limited to 'ext/session/session.c')
| -rw-r--r-- | ext/session/session.c | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/ext/session/session.c b/ext/session/session.c index f9e2c4d3ae..c55a12c342 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; |
