Index: /trunk/xc_shm.c
===================================================================
--- /trunk/xc_shm.c	(revision 162)
+++ /trunk/xc_shm.c	(revision 163)
@@ -11,8 +11,8 @@
 #include "xc_shm.h"
 
-typedef struct {
+struct _xc_shm_scheme_t {
 	const char              *name;
 	const xc_shm_handlers_t *handlers;
-} xc_shm_scheme_t;
+};
 static xc_shm_scheme_t xc_shm_schemes[10];
 
@@ -53,4 +53,21 @@
 }
 /* }}} */
+xc_shm_scheme_t *xc_shm_scheme_first() /* {{{ */
+{
+	return xc_shm_schemes;
+}
+/* }}} */
+xc_shm_scheme_t *xc_shm_scheme_next(xc_shm_scheme_t *scheme) /* {{{ */
+{
+	scheme ++;
+	return scheme->name ? scheme : NULL;
+}
+/* }}} */
+const char *xc_shm_scheme_name(xc_shm_scheme_t *scheme) /* {{{ */
+{
+	assert(scheme);
+	return scheme->name;
+}
+/* }}} */
 xc_shm_t *xc_shm_init(const char *type, xc_shmsize_t size, int readonly_protection, const void *arg1, const void *arg2) /* {{{ */
 {
Index: /trunk/xc_shm.h
===================================================================
--- /trunk/xc_shm.h	(revision 162)
+++ /trunk/xc_shm.h	(revision 163)
@@ -52,8 +52,12 @@
 };
 #endif
+typedef struct _xc_shm_scheme_t xc_shm_scheme_t;
 
 void xc_shm_init_modules();
 int xc_shm_scheme_register(const char *name, const xc_shm_handlers_t *handlers);
 const xc_shm_handlers_t *xc_shm_scheme_find(const char *name);
+xc_shm_scheme_t *xc_shm_scheme_first();
+xc_shm_scheme_t *xc_shm_scheme_next(xc_shm_scheme_t *scheme);
+const char *xc_shm_scheme_name(xc_shm_scheme_t *scheme);
 
 xc_shm_t *xc_shm_init(const char *type, xc_shmsize_t size, int readonly_protection, const void *arg1, const void *arg2);
Index: /trunk/xcache.c
===================================================================
--- /trunk/xcache.c	(revision 162)
+++ /trunk/xcache.c	(revision 163)
@@ -2123,4 +2123,6 @@
 	char buf[100];
 	char *ptr;
+	int left, len;
+	xc_shm_scheme_t *scheme;
 
 	php_info_print_table_start();
@@ -2132,5 +2134,5 @@
 	if (xc_php_size) {
 		ptr = _php_math_number_format(xc_php_size, 0, '.', ',');
-		sprintf(buf, "enabled, %s bytes, %d split(s), with %d slots each", ptr, xc_php_hcache.size, xc_php_hentry.size);
+		snprintf(buf, sizeof(buf), "enabled, %s bytes, %d split(s), with %d slots each", ptr, xc_php_hcache.size, xc_php_hentry.size);
 		php_info_print_table_row(2, "Opcode Cache", buf);
 		efree(ptr);
@@ -2141,5 +2143,5 @@
 	if (xc_var_size) {
 		ptr = _php_math_number_format(xc_var_size, 0, '.', ',');
-		sprintf(buf, "enabled, %s bytes, %d split(s), with %d slots each", ptr, xc_var_hcache.size, xc_var_hentry.size);
+		snprintf(buf, sizeof(buf), "enabled, %s bytes, %d split(s), with %d slots each", ptr, xc_var_hcache.size, xc_var_hentry.size);
 		php_info_print_table_row(2, "Variable Cache", buf);
 		efree(ptr);
@@ -2148,4 +2150,15 @@
 		php_info_print_table_row(2, "Variable Cache", "disabled");
 	}
+
+	left = sizeof(buf);
+	ptr = buf;
+	buf[0] = '\0';
+	for (scheme = xc_shm_scheme_first(); scheme; scheme = xc_shm_scheme_next(scheme)) {
+		len = snprintf(ptr, left, ptr == buf ? "%s" : ", %s", xc_shm_scheme_name(scheme));
+		left -= len;
+		ptr += len;
+	}
+	php_info_print_table_row(2, "Shared Memory Schemes", buf);
+
 #ifdef HAVE_XCACHE_COVERAGER
 	php_info_print_table_row(2, "Coverage Dumper", XG(coveragedumper) && xc_coveragedump_dir && xc_coveragedump_dir[0] ? "enabled" : "disabled");
