summaryrefslogtreecommitdiff
path: root/ext/session/session.c
diff options
context:
space:
mode:
authorSascha Schumann <sas@php.net>2001-05-03 15:48:49 +0000
committerSascha Schumann <sas@php.net>2001-05-03 15:48:49 +0000
commit9de9b7c1e9c3c2780e543272e421f36b5ac3486b (patch)
treeb04c455ddc187e0c985c0a515c5f7ca4807e4cd0 /ext/session/session.c
parent172a9c93031a21c19ad035df210c2b76e517bb88 (diff)
downloadphp-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.c31
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;