Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Initial steps to move the INI mechanism to the Zend engine

  • Loading branch information...
commit 1fd09132c2539400fa198ba3172aed9ab0a9b951 1 parent 825457a
Zeev Suraski zsuraski authored
3  Zend/Makefile.am
View
@@ -15,7 +15,8 @@ libZend_la_SOURCES=\
zend_execute.c zend_execute_API.c zend_highlight.c zend_llist.c \
zend_opcode.c zend_operators.c zend_ptr_stack.c zend_stack.c \
zend_variables.c zend.c zend_API.c zend_extensions.c zend_hash.c \
- zend_list.c zend_indent.c zend_builtin_functions.c zend_sprintf.c
+ zend_list.c zend_indent.c zend_builtin_functions.c zend_sprintf.c \
+ zend_ini.c
libZend_la_LIBADD = $(ZEND_SCANNER)
libZend_la_LDFLAGS = @EXTRA_LIBS@
516 Zend/zend_ini.c
View
@@ -0,0 +1,516 @@
+/*
+ +----------------------------------------------------------------------+
+ | Zend Engine |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1998-2000 Zend Technologies Ltd. (http://www.zend.com) |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 0.92 of the Zend license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available at through the world-wide-web at |
+ | http://www.zend.com/license/0_92.txt. |
+ | If you did not receive a copy of the Zend license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@zend.com so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Author: Zeev Suraski <zeev@zend.com> |
+ +----------------------------------------------------------------------+
+*/
+
+
+#include <stdlib.h>
+
+#include "zend.h"
+#include "zend_API.h"
+#include "zend_ini.h"
+#include "zend_alloc.h"
+#include "zend_operators.h"
+
+static HashTable known_directives;
+
+
+/*
+ * hash_apply functions
+ */
+static int zend_remove_ini_entries(zend_ini_entry *ini_entry, int *module_number)
+{
+ if (ini_entry->module_number == *module_number) {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+
+static int zend_restore_ini_entry_cb(zend_ini_entry *ini_entry, int stage)
+{
+ if (ini_entry->modified) {
+ if (ini_entry->on_modify) {
+ ini_entry->on_modify(ini_entry, ini_entry->orig_value, ini_entry->orig_value_length, ini_entry->mh_arg1, ini_entry->mh_arg2, ini_entry->mh_arg3, stage);
+ }
+ efree(ini_entry->value);
+ ini_entry->value = ini_entry->orig_value;
+ ini_entry->value_length = ini_entry->orig_value_length;
+ ini_entry->modified = 0;
+ ini_entry->orig_value = NULL;
+ ini_entry->orig_value_length = 0;
+ }
+ return 0;
+}
+
+/*
+ * Startup / shutdown
+ */
+int zend_ini_mstartup()
+{
+ if (zend_hash_init_ex(&known_directives, 100, NULL, NULL, 1, 0)==FAILURE) {
+ return FAILURE;
+ }
+ return SUCCESS;
+}
+
+
+int zend_ini_mshutdown()
+{
+ zend_hash_destroy(&known_directives);
+ return SUCCESS;
+}
+
+
+int zend_ini_rshutdown()
+{
+ zend_hash_apply_with_argument(&known_directives, (int (*)(void *, void *)) zend_restore_ini_entry_cb, (void *) ZEND_INI_STAGE_DEACTIVATE);
+ return SUCCESS;
+}
+
+
+static int ini_key_compare(const void *a, const void *b)
+{
+ Bucket *f;
+ Bucket *s;
+
+ f = *((Bucket **) a);
+ s = *((Bucket **) b);
+
+ if (f->nKeyLength==0 && s->nKeyLength==0) { /* both numeric */
+ return ZEND_NORMALIZE_BOOL(f->nKeyLength - s->nKeyLength);
+ } else if (f->nKeyLength==0) { /* f is numeric, s is not */
+ return -1;
+ } else if (s->nKeyLength==0) { /* s is numeric, f is not */
+ return 1;
+ } else { /* both strings */
+ return zend_binary_strcasecmp(f->arKey, f->nKeyLength, s->arKey, s->nKeyLength);
+ }
+}
+
+
+void zend_ini_sort_entries(void)
+{
+ zend_hash_sort(&known_directives, qsort, ini_key_compare, 0);
+}
+
+/*
+ * Registration / unregistration
+ */
+
+ZEND_API int zend_register_ini_entries(zend_ini_entry *ini_entry, int module_number)
+{
+ zend_ini_entry *p = ini_entry;
+ zend_ini_entry *hashed_ini_entry;
+ zval *default_value;
+
+ while (p->name) {
+ p->module_number = module_number;
+ if (zend_hash_add(&known_directives, p->name, p->name_length, p, sizeof(zend_ini_entry), (void **) &hashed_ini_entry)==FAILURE) {
+ zend_unregister_ini_entries(module_number);
+ return FAILURE;
+ }
+ if ((default_value=cfg_get_entry(p->name, p->name_length))) {
+ if (!hashed_ini_entry->on_modify
+ || hashed_ini_entry->on_modify(hashed_ini_entry, default_value->value.str.val, default_value->value.str.len, hashed_ini_entry->mh_arg1, hashed_ini_entry->mh_arg2, hashed_ini_entry->mh_arg3, ZEND_INI_STAGE_STARTUP)==SUCCESS) {
+ hashed_ini_entry->value = default_value->value.str.val;
+ hashed_ini_entry->value_length = default_value->value.str.len;
+ }
+ } else {
+ if (hashed_ini_entry->on_modify) {
+ hashed_ini_entry->on_modify(hashed_ini_entry, hashed_ini_entry->value, hashed_ini_entry->value_length, hashed_ini_entry->mh_arg1, hashed_ini_entry->mh_arg2, hashed_ini_entry->mh_arg3, ZEND_INI_STAGE_STARTUP);
+ }
+ }
+ p++;
+ }
+ return SUCCESS;
+}
+
+
+ZEND_API void zend_unregister_ini_entries(int module_number)
+{
+ zend_hash_apply_with_argument(&known_directives, (int (*)(void *, void *)) zend_remove_ini_entries, (void *) &module_number);
+}
+
+
+static int zend_ini_refresh_cache(zend_ini_entry *p, int stage)
+{
+ if (p->on_modify) {
+ p->on_modify(p, p->value, p->value_length, p->mh_arg1, p->mh_arg2, p->mh_arg3, stage);
+ }
+ return 0;
+}
+
+
+ZEND_API void zend_ini_refresh_caches(int stage)
+{
+ zend_hash_apply_with_argument(&known_directives, (int (*)(void *, void *)) zend_ini_refresh_cache, (void *) stage);
+}
+
+
+ZEND_API int zend_alter_ini_entry(char *name, uint name_length, char *new_value, uint new_value_length, int modify_type, int stage)
+{
+ zend_ini_entry *ini_entry;
+ char *duplicate;
+
+ if (zend_hash_find(&known_directives, name, name_length, (void **) &ini_entry)==FAILURE) {
+ return FAILURE;
+ }
+
+ if (!(ini_entry->modifyable & modify_type)) {
+ return FAILURE;
+ }
+
+ duplicate = estrndup(new_value, new_value_length);
+
+ if (!ini_entry->on_modify
+ || ini_entry->on_modify(ini_entry, duplicate, new_value_length, ini_entry->mh_arg1, ini_entry->mh_arg2, ini_entry->mh_arg3, stage)==SUCCESS) {
+ if (!ini_entry->modified) {
+ ini_entry->orig_value = ini_entry->value;
+ ini_entry->orig_value_length = ini_entry->value_length;
+ } else { /* we already changed the value, free the changed value */
+ efree(ini_entry->value);
+ }
+ ini_entry->value = duplicate;
+ ini_entry->value_length = new_value_length;
+ ini_entry->modified = 1;
+ } else {
+ efree(duplicate);
+ }
+
+ return SUCCESS;
+}
+
+
+ZEND_API int zend_restore_ini_entry(char *name, uint name_length, int stage)
+{
+ zend_ini_entry *ini_entry;
+
+ if (zend_hash_find(&known_directives, name, name_length, (void **) &ini_entry)==FAILURE) {
+ return FAILURE;
+ }
+
+ zend_restore_ini_entry_cb(ini_entry, stage);
+ return SUCCESS;
+}
+
+
+ZEND_API int zend_ini_register_displayer(char *name, uint name_length, void (*displayer)(zend_ini_entry *ini_entry, int type))
+{
+ zend_ini_entry *ini_entry;
+
+ if (zend_hash_find(&known_directives, name, name_length, (void **) &ini_entry)==FAILURE) {
+ return FAILURE;
+ }
+
+ ini_entry->displayer = displayer;
+ return SUCCESS;
+}
+
+
+
+/*
+ * Data retrieval
+ */
+
+ZEND_API long zend_ini_long(char *name, uint name_length, int orig)
+{
+ zend_ini_entry *ini_entry;
+
+ if (zend_hash_find(&known_directives, name, name_length, (void **) &ini_entry)==SUCCESS) {
+ if (orig && ini_entry->modified) {
+ return (ini_entry->orig_value ? strtol(ini_entry->orig_value, NULL, 0) : 0);
+ } else if (ini_entry->value) {
+ return strtol(ini_entry->value, NULL, 0);
+ }
+ }
+
+ return 0;
+}
+
+
+ZEND_API double zend_ini_double(char *name, uint name_length, int orig)
+{
+ zend_ini_entry *ini_entry;
+
+ if (zend_hash_find(&known_directives, name, name_length, (void **) &ini_entry)==SUCCESS) {
+ if (orig && ini_entry->modified) {
+ return (double) (ini_entry->orig_value ? strtod(ini_entry->orig_value, NULL) : 0.0);
+ } else if (ini_entry->value) {
+ return (double) strtod(ini_entry->value, NULL);
+ }
+ }
+
+ return 0.0;
+}
+
+
+ZEND_API char *zend_ini_string(char *name, uint name_length, int orig)
+{
+ zend_ini_entry *ini_entry;
+
+ if (zend_hash_find(&known_directives, name, name_length, (void **) &ini_entry)==SUCCESS) {
+ if (orig && ini_entry->modified) {
+ return ini_entry->orig_value;
+ } else {
+ return ini_entry->value;
+ }
+ }
+
+ return "";
+}
+
+
+zend_ini_entry *get_ini_entry(char *name, uint name_length)
+{
+ zend_ini_entry *ini_entry;
+
+ if (zend_hash_find(&known_directives, name, name_length, (void **) &ini_entry)==SUCCESS) {
+ return ini_entry;
+ } else {
+ return NULL;
+ }
+}
+
+
+static void zend_ini_displayer_cb(zend_ini_entry *ini_entry, int type)
+{
+ if (ini_entry->displayer) {
+ ini_entry->displayer(ini_entry, type);
+ } else {
+ char *display_string;
+ uint display_string_length;
+
+ if (type==ZEND_INI_DISPLAY_ORIG && ini_entry->modified) {
+ if (ini_entry->orig_value) {
+ display_string = ini_entry->orig_value;
+ display_string_length = ini_entry->orig_value_length;
+ } else {
+ display_string = "<i>no value</i>";
+ display_string_length = sizeof("<i>no value</i>")-1;
+ }
+ } else if (ini_entry->value && ini_entry->value[0]) {
+ display_string = ini_entry->value;
+ display_string_length = ini_entry->value_length;
+ } else {
+ display_string = "<i>no value</i>";
+ display_string_length = sizeof("<i>no value</i>")-1;
+ }
+ ZEND_WRITE(display_string, display_string_length);
+ }
+}
+
+
+ZEND_INI_DISP(zend_ini_boolean_displayer_cb)
+{
+ int value;
+
+ if (type==ZEND_INI_DISPLAY_ORIG && ini_entry->modified) {
+ value = (ini_entry->orig_value ? atoi(ini_entry->orig_value) : 0);
+ } else if (ini_entry->value) {
+ value = atoi(ini_entry->value);
+ } else {
+ value = 0;
+ }
+ if (value) {
+ ZEND_PUTS("On");
+ } else {
+ ZEND_PUTS("Off");
+ }
+}
+
+
+ZEND_INI_DISP(zend_ini_color_displayer_cb)
+{
+ char *value;
+
+ if (type==ZEND_INI_DISPLAY_ORIG && ini_entry->modified) {
+ value = ini_entry->orig_value;
+ } else if (ini_entry->value) {
+ value = ini_entry->value;
+ } else {
+ value = NULL;
+ }
+ if (value) {
+ zend_printf("<font color=\"%s\">%s</font>", value, value);
+ } else {
+ ZEND_PUTS("<i>no value</i>;");
+ }
+}
+
+
+ZEND_INI_DISP(display_link_numbers)
+{
+ char *value;
+
+ if (type==ZEND_INI_DISPLAY_ORIG && ini_entry->modified) {
+ value = ini_entry->orig_value;
+ } else if (ini_entry->value) {
+ value = ini_entry->value;
+ } else {
+ value = NULL;
+ }
+
+ if (value) {
+ if (atoi(value)==-1) {
+ ZEND_PUTS("Unlimited");
+ } else {
+ zend_printf("%s", value);
+ }
+ }
+}
+
+
+#if 0
+static int zend_ini_displayer(zend_ini_entry *ini_entry, int module_number)
+{
+ if (ini_entry->module_number != module_number) {
+ return 0;
+ }
+
+ ZEND_PUTS("<TR VALIGN=\"baseline\" BGCOLOR=\"" ZEND_CONTENTS_COLOR "\">");
+ ZEND_PUTS("<TD BGCOLOR=\"" ZEND_ENTRY_NAME_COLOR "\"><B>");
+ ZEND_WRITE(ini_entry->name, ini_entry->name_length-1);
+ ZEND_PUTS("</B><BR></TD><TD ALIGN=\"center\">");
+ zend_ini_displayer_cb(ini_entry, ZEND_INI_DISPLAY_ACTIVE);
+ ZEND_PUTS("</TD><TD ALIGN=\"center\">");
+ zend_ini_displayer_cb(ini_entry, ZEND_INI_DISPLAY_ORIG);
+ ZEND_PUTS("</TD></TR>\n");
+ return 0;
+}
+
+
+ZEND_API void display_ini_entries(zend_module_entry *module)
+{
+ int module_number;
+
+ if (module) {
+ module_number = module->module_number;
+ } else {
+ module_number = 0;
+ }
+#if 0 /* FIXME */
+ php_info_print_table_start();
+ php_info_print_table_header(3, "Directive", "Local Value", "Master Value");
+ zend_hash_apply_with_argument(&known_directives, (int (*)(void *, void *)) zend_ini_displayer, (void *) (long) module_number);
+ php_info_print_table_end();
+#endif
+}
+#endif
+
+
+/* Standard message handlers */
+
+ZEND_API ZEND_INI_MH(OnUpdateBool)
+{
+ zend_bool *p;
+#ifndef ZTS
+ char *base = (char *) mh_arg2;
+#else
+ char *base;
+
+ base = (char *) ts_resource(*((int *) mh_arg2));
+#endif
+
+ p = (zend_bool *) (base+(size_t) mh_arg1);
+
+ *p = (zend_bool) atoi(new_value);
+ return SUCCESS;
+}
+
+
+ZEND_API ZEND_INI_MH(OnUpdateInt)
+{
+ long *p;
+#ifndef ZTS
+ char *base = (char *) mh_arg2;
+#else
+ char *base;
+
+ base = (char *) ts_resource(*((int *) mh_arg2));
+#endif
+
+ p = (long *) (base+(size_t) mh_arg1);
+
+ *p = zend_atoi(new_value, new_value_length);
+ return SUCCESS;
+}
+
+
+ZEND_API ZEND_INI_MH(OnUpdateReal)
+{
+ double *p;
+#ifndef ZTS
+ char *base = (char *) mh_arg2;
+#else
+ char *base;
+
+ base = (char *) ts_resource(*((int *) mh_arg2));
+#endif
+
+ p = (double *) (base+(size_t) mh_arg1);
+
+ *p = strtod(new_value, NULL);
+ return SUCCESS;
+}
+
+
+ZEND_API ZEND_INI_MH(OnUpdateString)
+{
+ char **p;
+#ifndef ZTS
+ char *base = (char *) mh_arg2;
+#else
+ char *base;
+
+ base = (char *) ts_resource(*((int *) mh_arg2));
+#endif
+
+ p = (char **) (base+(size_t) mh_arg1);
+
+ *p = new_value;
+ return SUCCESS;
+}
+
+
+ZEND_API ZEND_INI_MH(OnUpdateStringUnempty)
+{
+ char **p;
+#ifndef ZTS
+ char *base = (char *) mh_arg2;
+#else
+ char *base;
+
+ base = (char *) ts_resource(*((int *) mh_arg2));
+#endif
+
+ if (new_value && !new_value[0]) {
+ return FAILURE;
+ }
+
+ p = (char **) (base+(size_t) mh_arg1);
+
+ *p = new_value;
+ return SUCCESS;
+}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ */
159 Zend/zend_ini.h
View
@@ -0,0 +1,159 @@
+/*
+ +----------------------------------------------------------------------+
+ | Zend Engine |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1998-2000 Zend Technologies Ltd. (http://www.zend.com) |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 0.92 of the Zend license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available at through the world-wide-web at |
+ | http://www.zend.com/license/0_92.txt. |
+ | If you did not receive a copy of the Zend license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@zend.com so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Author: Zeev Suraski <zeev@zend.com> |
+ +----------------------------------------------------------------------+
+*/
+
+
+#ifndef ZEND_INI_H
+#define ZEND_INI_H
+
+#define ZEND_INI_USER (1<<0)
+#define ZEND_INI_PERDIR (1<<1)
+#define ZEND_INI_SYSTEM (1<<2)
+
+#define ZEND_INI_ALL (ZEND_INI_USER|ZEND_INI_PERDIR|ZEND_INI_SYSTEM)
+
+typedef struct _zend_ini_entry zend_ini_entry;
+
+#define ZEND_INI_MH(name) int name(zend_ini_entry *entry, char *new_value, uint new_value_length, void *mh_arg1, void *mh_arg2, void *mh_arg3, int stage)
+#define ZEND_INI_DISP(name) void name(zend_ini_entry *ini_entry, int type)
+
+struct _zend_ini_entry {
+ int module_number;
+ int modifyable;
+ char *name;
+ uint name_length;
+ ZEND_INI_MH((*on_modify));
+ void *mh_arg1;
+ void *mh_arg2;
+ void *mh_arg3;
+
+ char *value;
+ uint value_length;
+
+ char *orig_value;
+ uint orig_value_length;
+ int modified;
+
+ void (*displayer)(zend_ini_entry *ini_entry, int type);
+};
+
+
+int zend_ini_mstartup(void);
+int zend_ini_mshutdown(void);
+int zend_ini_rshutdown(void);
+
+void zend_ini_sort_entries(void);
+
+ZEND_API int zend_register_ini_entries(zend_ini_entry *ini_entry, int module_number);
+ZEND_API void zend_unregister_ini_entries(int module_number);
+ZEND_API void zend_ini_refresh_caches(int stage);
+ZEND_API int zend_alter_ini_entry(char *name, uint name_length, char *new_value, uint new_value_length, int modify_type, int stage);
+ZEND_API int zend_restore_ini_entry(char *name, uint name_length, int stage);
+ZEND_API void display_ini_entries(zend_module_entry *module);
+
+ZEND_API long zend_ini_long(char *name, uint name_length, int orig);
+ZEND_API double zend_ini_double(char *name, uint name_length, int orig);
+ZEND_API char *zend_ini_string(char *name, uint name_length, int orig);
+zend_ini_entry *get_ini_entry(char *name, uint name_length);
+
+ZEND_API int zend_ini_register_displayer(char *name, uint name_length, void (*displayer)(zend_ini_entry *ini_entry, int type));
+ZEND_API ZEND_INI_DISP(zend_ini_boolean_displayer_cb);
+ZEND_API ZEND_INI_DISP(zend_ini_color_displayer_cb);
+ZEND_API ZEND_INI_DISP(display_link_numbers);
+
+#define ZEND_INI_BEGIN() static zend_ini_entry ini_entries[] = {
+#define ZEND_INI_END() { 0, 0, NULL, 0, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, 0, NULL } };
+
+#define ZEND_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, arg1, arg2, arg3, displayer) \
+ { 0, modifyable, name, sizeof(name), on_modify, arg1, arg2, arg3, default_value, sizeof(default_value)-1, NULL, 0, 0, displayer },
+
+#define ZEND_INI_ENTRY3(name, default_value, modifyable, on_modify, arg1, arg2, arg3) \
+ ZEND_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, arg1, arg2, arg3, NULL)
+
+#define ZEND_INI_ENTRY2_EX(name, default_value, modifyable, on_modify, arg1, arg2, displayer) \
+ ZEND_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, arg1, arg2, NULL, displayer)
+
+#define ZEND_INI_ENTRY2(name, default_value, modifyable, on_modify, arg1, arg2) \
+ ZEND_INI_ENTRY2_EX(name, default_value, modifyable, on_modify, arg1, arg2, NULL)
+
+#define ZEND_INI_ENTRY1_EX(name, default_value, modifyable, on_modify, arg1, displayer) \
+ ZEND_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, arg1, NULL, NULL, displayer)
+
+#define ZEND_INI_ENTRY1(name, default_value, modifyable, on_modify, arg1) \
+ ZEND_INI_ENTRY1_EX(name, default_value, modifyable, on_modify, arg1, NULL)
+
+#define ZEND_INI_ENTRY_EX(name, default_value, modifyable, on_modify, displayer) \
+ ZEND_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, NULL, NULL, NULL, displayer)
+
+#define ZEND_INI_ENTRY(name, default_value, modifyable, on_modify) \
+ ZEND_INI_ENTRY_EX(name, default_value, modifyable, on_modify, NULL)
+
+#ifdef ZTS
+#define STD_ZEND_INI_ENTRY(name, default_value, modifyable, on_modify, property_name, struct_type, struct_ptr) \
+ ZEND_INI_ENTRY2(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr##_id)
+#define STD_ZEND_INI_ENTRY_EX(name, default_value, modifyable, on_modify, property_name, struct_type, struct_ptr, displayer) \
+ ZEND_INI_ENTRY2_EX(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr##_id, displayer)
+#define STD_ZEND_INI_BOOLEAN(name, default_value, modifyable, on_modify, property_name, struct_type, struct_ptr) \
+ ZEND_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr##_id, NULL, zend_ini_boolean_displayer_cb)
+#else
+#define STD_ZEND_INI_ENTRY(name, default_value, modifyable, on_modify, property_name, struct_type, struct_ptr) \
+ ZEND_INI_ENTRY2(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr)
+#define STD_ZEND_INI_ENTRY_EX(name, default_value, modifyable, on_modify, property_name, struct_type, struct_ptr, displayer) \
+ ZEND_INI_ENTRY2_EX(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr, displayer)
+#define STD_ZEND_INI_BOOLEAN(name, default_value, modifyable, on_modify, property_name, struct_type, struct_ptr) \
+ ZEND_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr, NULL, zend_ini_boolean_displayer_cb)
+#endif
+
+#define INI_INT(name) zend_ini_long((name), sizeof(name), 0)
+#define INI_FLT(name) zend_ini_double((name), sizeof(name), 0)
+#define INI_STR(name) zend_ini_string((name), sizeof(name), 0)
+#define INI_BOOL(name) ((zend_bool) INI_INT(name))
+
+#define INI_ORIG_INT(name) zend_ini_long((name), sizeof(name), 1)
+#define INI_ORIG_FLT(name) zend_ini_double((name), sizeof(name), 1)
+#define INI_ORIG_STR(name) zend_ini_string((name), sizeof(name), 1)
+#define INI_ORIG_BOOL(name) ((zend_bool) INI_ORIG_INT(name))
+
+
+#define REGISTER_INI_ENTRIES() zend_register_ini_entries(ini_entries, module_number)
+#define UNREGISTER_INI_ENTRIES() zend_unregister_ini_entries(module_number)
+#define DISPLAY_INI_ENTRIES() display_ini_entries(zend_module)
+
+#define REGISTER_INI_DISPLAYER(name, displayer) zend_ini_register_displayer((name), sizeof(name), displayer)
+#define REGISTER_INI_BOOLEAN(name) REGISTER_INI_DISPLAYER(name, zend_ini_boolean_displayer_cb)
+
+zval *cfg_get_entry(char *name, uint name_length);
+
+
+/* Standard message handlers */
+ZEND_API ZEND_INI_MH(OnUpdateBool);
+ZEND_API ZEND_INI_MH(OnUpdateInt);
+ZEND_API ZEND_INI_MH(OnUpdateReal);
+ZEND_API ZEND_INI_MH(OnUpdateString);
+ZEND_API ZEND_INI_MH(OnUpdateStringUnempty);
+
+
+#define ZEND_INI_DISPLAY_ORIG 1
+#define ZEND_INI_DISPLAY_ACTIVE 2
+
+#define ZEND_INI_STAGE_STARTUP (1<<0)
+#define ZEND_INI_STAGE_SHUTDOWN (1<<1)
+#define ZEND_INI_STAGE_ACTIVATE (1<<2)
+#define ZEND_INI_STAGE_DEACTIVATE (1<<3)
+#define ZEND_INI_STAGE_RUNTIME (1<<4)
+
+#endif /* ZEND_INI_H */
26 Zend/zend_operators.c
View
@@ -36,6 +36,30 @@
#include "ext/bcmath/number.h"
#endif
+ZEND_API int zend_atoi(const char *str, int str_len)
+{
+ int retval;
+
+ if (!str_len) {
+ str_len = strlen(str);
+ }
+ retval = atoi(str);
+ if (str_len>0) {
+ switch (str[str_len-1]) {
+ case 'k':
+ case 'K':
+ retval *= 1024;
+ break;
+ case 'm':
+ case 'M':
+ retval *= 1048576;
+ break;
+ }
+ }
+ return retval;
+}
+
+
ZEND_API double zend_string_to_double(const char *number, zend_uint length)
{
double divisor = 10.0;
@@ -1724,4 +1748,6 @@ static inline int is_numeric_string(char *str, int length, long *lval, double *d
}
}
+
+
#endif
1  Zend/zend_operators.h
View
@@ -158,6 +158,7 @@ ZEND_API void zend_compare_symbol_tables(zval *result, HashTable *ht1, HashTable
ZEND_API void zend_compare_arrays(zval *result, zval *a1, zval *a2);
ZEND_API void zend_compare_objects(zval *result, zval *o1, zval *o2);
+ZEND_API int zend_atoi(const char *str, int str_len);
#define convert_to_ex_master(ppzv, lower_type, upper_type) \
if ((*ppzv)->type!=IS_##upper_type) { \
14 ext/session/session.c
View
@@ -987,14 +987,14 @@ PHP_FUNCTION(session_set_cookie_params)
if (ZEND_NUM_ARGS() > 1) {
convert_to_string_ex(path);
- php_alter_ini_entry("session.cookie_path", sizeof("session.cookie_path"), Z_STRVAL_PP(path), Z_STRLEN_PP(path), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
+ zend_alter_ini_entry("session.cookie_path", sizeof("session.cookie_path"), Z_STRVAL_PP(path), Z_STRLEN_PP(path), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
if (ZEND_NUM_ARGS() > 2) {
convert_to_string_ex(domain);
- php_alter_ini_entry("session.cookie_domain", sizeof("session.cookie_domain"), Z_STRVAL_PP(domain), Z_STRLEN_PP(domain), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
+ zend_alter_ini_entry("session.cookie_domain", sizeof("session.cookie_domain"), Z_STRVAL_PP(domain), Z_STRLEN_PP(domain), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
if (ZEND_NUM_ARGS() > 3) {
convert_to_long_ex(secure);
- php_alter_ini_entry("session.cookie_secure", sizeof("session.cookie_secure"), Z_BVAL_PP(secure)?"1":"0", 1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
+ zend_alter_ini_entry("session.cookie_secure", sizeof("session.cookie_secure"), Z_BVAL_PP(secure)?"1":"0", 1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
}
}
}
@@ -1039,7 +1039,7 @@ PHP_FUNCTION(session_name)
if (ac == 1) {
convert_to_string_ex(p_name);
- php_alter_ini_entry("session.name", sizeof("session.name"), Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
+ zend_alter_ini_entry("session.name", sizeof("session.name"), Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
}
RETVAL_STRING(old, 0);
@@ -1097,7 +1097,7 @@ PHP_FUNCTION(session_set_save_handler)
if (PS(nr_open_sessions) > 0)
RETURN_FALSE;
- php_alter_ini_entry("session.save_handler", sizeof("session.save_handler"), "user", sizeof("user")-1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
+ zend_alter_ini_entry("session.save_handler", sizeof("session.save_handler"), "user", sizeof("user")-1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
mdata = emalloc(sizeof(*mdata));
@@ -1128,7 +1128,7 @@ PHP_FUNCTION(session_save_path)
if (ac == 1) {
convert_to_string_ex(p_name);
- php_alter_ini_entry("session.save_path", sizeof("session.save_path"), Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
+ zend_alter_ini_entry("session.save_path", sizeof("session.save_path"), Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
}
RETVAL_STRING(old, 0);
@@ -1176,7 +1176,7 @@ PHP_FUNCTION(session_cache_limiter)
if (ac == 1) {
convert_to_string_ex(p_cache_limiter);
- php_alter_ini_entry("session.cache_limiter", sizeof("session.cache_limiter"), Z_STRVAL_PP(p_cache_limiter), Z_STRLEN_PP(p_cache_limiter), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
+ zend_alter_ini_entry("session.cache_limiter", sizeof("session.cache_limiter"), Z_STRVAL_PP(p_cache_limiter), Z_STRLEN_PP(p_cache_limiter), PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
}
RETVAL_STRING(old, 0);
5 ext/standard/basic_functions.c
View
@@ -1919,7 +1919,8 @@ PHP_FUNCTION(ini_set)
RETVAL_FALSE;
}
- if (php_alter_ini_entry((*varname)->value.str.val, (*varname)->value.str.len+1, (*new_value)->value.str.val, (*new_value)->value.str.len, PHP_INI_USER, PHP_INI_STAGE_RUNTIME)==FAILURE) {
+ if (zend_alter_ini_entry((*varname)->value.str.val, (*varname)->value.str.len+1, (*new_value)->value.str.val, (*new_value)->value.str.len, PHP_INI_USER, PHP_INI_STAGE_RUNTIME)==FAILURE) {
+ zval_dtor(return_value);
RETURN_FALSE;
}
}
@@ -1937,7 +1938,7 @@ PHP_FUNCTION(ini_restore)
convert_to_string_ex(varname);
- php_restore_ini_entry((*varname)->value.str.val, (*varname)->value.str.len+1, PHP_INI_STAGE_RUNTIME);
+ zend_restore_ini_entry((*varname)->value.str.val, (*varname)->value.str.len+1, PHP_INI_STAGE_RUNTIME);
}
/* }}} */
2  ext/standard/info.c
View
@@ -240,7 +240,7 @@ PHPAPI void php_print_info(int flag)
PUTS("</a></h1>\n");
}
- php_ini_sort_entries();
+ zend_ini_sort_entries();
if (flag & PHP_INFO_CONFIGURATION) {
php_info_print_hr();
2  main/configuration-parser.y
View
@@ -453,7 +453,7 @@ statement:
case PARSING_MODE_CFG:
zend_hash_update(active_hash_table, $1.value.str.val, $1.value.str.len+1, &$3, sizeof(zval), NULL);
if (active_hash_table == &configuration_hash) {
- php_alter_ini_entry($1.value.str.val, $1.value.str.len+1, $3.value.str.val, $3.value.str.len+1, PHP_INI_SYSTEM, PHP_INI_STAGE_STARTUP);
+ zend_alter_ini_entry($1.value.str.val, $1.value.str.len+1, $3.value.str.val, $3.value.str.len+1, PHP_INI_SYSTEM, PHP_INI_STAGE_STARTUP);
}
break;
case PARSING_MODE_BROWSCAP:
6 main/main.c
View
@@ -672,7 +672,7 @@ void php_request_shutdown(void *dummy)
}
if (setjmp(EG(bailout))==0) {
- php_ini_rshutdown();
+ zend_ini_rshutdown();
}
zend_deactivate(CLS_C ELS_CC);
@@ -862,7 +862,7 @@ int php_module_startup(sapi_module_struct *sf)
le_index_ptr = zend_register_list_destructors_ex(NULL, NULL, "index pointer", 0);
FREE_MUTEX(gLock);
- php_ini_mstartup();
+ zend_ini_mstartup();
if (php_config_ini_startup() == FAILURE) {
return FAILURE;
@@ -937,7 +937,7 @@ void php_module_shutdown()
zend_shutdown();
php_shutdown_fopen_wrappers();
UNREGISTER_INI_ENTRIES();
- php_ini_mshutdown();
+ zend_ini_mshutdown();
shutdown_memory_manager(0, 1);
module_initialized = 0;
}
485 main/php_ini.c
View
@@ -1,293 +1,28 @@
/*
+----------------------------------------------------------------------+
- | PHP version 4.0 |
+ | PHP version 4.0 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group |
+ | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group |
+----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
+ | This source file is subject to version 2.02 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available at through the world-wide-web at |
+ | http://www.php.net/license/2_02.txt. |
| If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
- | Author: Zeev Suraski <zeev@zend.com> |
+ | Author: Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
-#include <stdlib.h>
-
#include "php.h"
-#include "php_ini.h"
-#include "zend_alloc.h"
-#include "php_globals.h"
#include "ext/standard/info.h"
+#include "zend_ini.h"
-static HashTable known_directives;
-
-
-/*
- * hash_apply functions
- */
-static int php_remove_ini_entries(php_ini_entry *ini_entry, int *module_number)
-{
- if (ini_entry->module_number == *module_number) {
- return 1;
- } else {
- return 0;
- }
-}
-
-
-static int php_restore_ini_entry_cb(php_ini_entry *ini_entry, int stage)
-{
- if (ini_entry->modified) {
- if (ini_entry->on_modify) {
- ini_entry->on_modify(ini_entry, ini_entry->orig_value, ini_entry->orig_value_length, ini_entry->mh_arg1, ini_entry->mh_arg2, ini_entry->mh_arg3, stage);
- }
- efree(ini_entry->value);
- ini_entry->value = ini_entry->orig_value;
- ini_entry->value_length = ini_entry->orig_value_length;
- ini_entry->modified = 0;
- ini_entry->orig_value = NULL;
- ini_entry->orig_value_length = 0;
- }
- return 0;
-}
-
-/*
- * Startup / shutdown
- */
-int php_ini_mstartup()
-{
- if (zend_hash_init_ex(&known_directives, 100, NULL, NULL, 1, 0)==FAILURE) {
- return FAILURE;
- }
- return SUCCESS;
-}
-
-
-int php_ini_mshutdown()
-{
- zend_hash_destroy(&known_directives);
- return SUCCESS;
-}
-
-
-int php_ini_rshutdown()
-{
- zend_hash_apply_with_argument(&known_directives, (int (*)(void *, void *)) php_restore_ini_entry_cb, (void *) PHP_INI_STAGE_DEACTIVATE);
- return SUCCESS;
-}
-
-
-static int ini_key_compare(const void *a, const void *b)
-{
- Bucket *f;
- Bucket *s;
-
- f = *((Bucket **) a);
- s = *((Bucket **) b);
-
- if (f->nKeyLength==0 && s->nKeyLength==0) { /* both numeric */
- return ZEND_NORMALIZE_BOOL(f->nKeyLength - s->nKeyLength);
- } else if (f->nKeyLength==0) { /* f is numeric, s is not */
- return -1;
- } else if (s->nKeyLength==0) { /* s is numeric, f is not */
- return 1;
- } else { /* both strings */
- return zend_binary_strcasecmp(f->arKey, f->nKeyLength, s->arKey, s->nKeyLength);
- }
-}
-
-
-void php_ini_sort_entries(void)
-{
- zend_hash_sort(&known_directives, qsort, ini_key_compare, 0);
-}
-
-/*
- * Registration / unregistration
- */
-
-PHPAPI int php_register_ini_entries(php_ini_entry *ini_entry, int module_number)
-{
- php_ini_entry *p = ini_entry;
- php_ini_entry *hashed_ini_entry;
- pval *default_value;
-
- while (p->name) {
- p->module_number = module_number;
- if (zend_hash_add(&known_directives, p->name, p->name_length, p, sizeof(php_ini_entry), (void **) &hashed_ini_entry)==FAILURE) {
- php_unregister_ini_entries(module_number);
- return FAILURE;
- }
- if ((default_value=cfg_get_entry(p->name, p->name_length))) {
- if (!hashed_ini_entry->on_modify
- || hashed_ini_entry->on_modify(hashed_ini_entry, default_value->value.str.val, default_value->value.str.len, hashed_ini_entry->mh_arg1, hashed_ini_entry->mh_arg2, hashed_ini_entry->mh_arg3, PHP_INI_STAGE_STARTUP)==SUCCESS) {
- hashed_ini_entry->value = default_value->value.str.val;
- hashed_ini_entry->value_length = default_value->value.str.len;
- }
- } else {
- if (hashed_ini_entry->on_modify) {
- hashed_ini_entry->on_modify(hashed_ini_entry, hashed_ini_entry->value, hashed_ini_entry->value_length, hashed_ini_entry->mh_arg1, hashed_ini_entry->mh_arg2, hashed_ini_entry->mh_arg3, PHP_INI_STAGE_STARTUP);
- }
- }
- p++;
- }
- return SUCCESS;
-}
-
-
-PHPAPI void php_unregister_ini_entries(int module_number)
-{
- zend_hash_apply_with_argument(&known_directives, (int (*)(void *, void *)) php_remove_ini_entries, (void *) &module_number);
-}
-
-
-static int php_ini_refresh_cache(php_ini_entry *p, int stage)
-{
- if (p->on_modify) {
- p->on_modify(p, p->value, p->value_length, p->mh_arg1, p->mh_arg2, p->mh_arg3, stage);
- }
- return 0;
-}
-
-PHPAPI void php_ini_refresh_caches(int stage)
-{
- zend_hash_apply_with_argument(&known_directives, (int (*)(void *, void *)) php_ini_refresh_cache, (void *) stage);
-}
-
-
-PHPAPI int php_alter_ini_entry(char *name, uint name_length, char *new_value, uint new_value_length, int modify_type, int stage)
-{
- php_ini_entry *ini_entry;
- char *duplicate;
-
- if (zend_hash_find(&known_directives, name, name_length, (void **) &ini_entry)==FAILURE) {
- return FAILURE;
- }
-
- if (!(ini_entry->modifyable & modify_type)) {
- return FAILURE;
- }
-
- duplicate = estrndup(new_value, new_value_length);
-
- if (!ini_entry->on_modify
- || ini_entry->on_modify(ini_entry, duplicate, new_value_length, ini_entry->mh_arg1, ini_entry->mh_arg2, ini_entry->mh_arg3, stage)==SUCCESS) {
- if (!ini_entry->modified) {
- ini_entry->orig_value = ini_entry->value;
- ini_entry->orig_value_length = ini_entry->value_length;
- } else { /* we already changed the value, free the changed value */
- efree(ini_entry->value);
- }
- ini_entry->value = duplicate;
- ini_entry->value_length = new_value_length;
- ini_entry->modified = 1;
- } else {
- efree(duplicate);
- }
-
- return SUCCESS;
-}
-
-
-PHPAPI int php_restore_ini_entry(char *name, uint name_length, int stage)
-{
- php_ini_entry *ini_entry;
-
- if (zend_hash_find(&known_directives, name, name_length, (void **) &ini_entry)==FAILURE) {
- return FAILURE;
- }
-
- php_restore_ini_entry_cb(ini_entry, stage);
- return SUCCESS;
-}
-
-
-PHPAPI int php_ini_register_displayer(char *name, uint name_length, void (*displayer)(php_ini_entry *ini_entry, int type))
-{
- php_ini_entry *ini_entry;
-
- if (zend_hash_find(&known_directives, name, name_length, (void **) &ini_entry)==FAILURE) {
- return FAILURE;
- }
-
- ini_entry->displayer = displayer;
- return SUCCESS;
-}
-
-
-
-/*
- * Data retrieval
- */
-
-PHPAPI long php_ini_long(char *name, uint name_length, int orig)
-{
- php_ini_entry *ini_entry;
-
- if (zend_hash_find(&known_directives, name, name_length, (void **) &ini_entry)==SUCCESS) {
- if (orig && ini_entry->modified) {
- return (ini_entry->orig_value ? strtol(ini_entry->orig_value, NULL, 0) : 0);
- } else if (ini_entry->value) {
- return strtol(ini_entry->value, NULL, 0);
- }
- }
-
- return 0;
-}
-
-
-PHPAPI double php_ini_double(char *name, uint name_length, int orig)
-{
- php_ini_entry *ini_entry;
-
- if (zend_hash_find(&known_directives, name, name_length, (void **) &ini_entry)==SUCCESS) {
- if (orig && ini_entry->modified) {
- return (double) (ini_entry->orig_value ? strtod(ini_entry->orig_value, NULL) : 0.0);
- } else if (ini_entry->value) {
- return (double) strtod(ini_entry->value, NULL);
- }
- }
-
- return 0.0;
-}
-
-
-PHPAPI char *php_ini_string(char *name, uint name_length, int orig)
-{
- php_ini_entry *ini_entry;
-
- if (zend_hash_find(&known_directives, name, name_length, (void **) &ini_entry)==SUCCESS) {
- if (orig && ini_entry->modified) {
- return ini_entry->orig_value;
- } else {
- return ini_entry->value;
- }
- }
-
- return "";
-}
-
-
-php_ini_entry *get_ini_entry(char *name, uint name_length)
-{
- php_ini_entry *ini_entry;
-
- if (zend_hash_find(&known_directives, name, name_length, (void **) &ini_entry)==SUCCESS) {
- return ini_entry;
- } else {
- return NULL;
- }
-}
-
-
-static void php_ini_displayer_cb(php_ini_entry *ini_entry, int type)
+static void php_ini_displayer_cb(zend_ini_entry *ini_entry, int type)
{
if (ini_entry->displayer) {
ini_entry->displayer(ini_entry, type);
@@ -295,7 +30,7 @@ static void php_ini_displayer_cb(php_ini_entry *ini_entry, int type)
char *display_string;
uint display_string_length;
- if (type==PHP_INI_DISPLAY_ORIG && ini_entry->modified) {
+ if (type==ZEND_INI_DISPLAY_ORIG && ini_entry->modified) {
if (ini_entry->orig_value) {
display_string = ini_entry->orig_value;
display_string_length = ini_entry->orig_value_length;
@@ -315,67 +50,7 @@ static void php_ini_displayer_cb(php_ini_entry *ini_entry, int type)
}
-PHP_INI_DISP(php_ini_boolean_displayer_cb)
-{
- int value;
-
- if (type==PHP_INI_DISPLAY_ORIG && ini_entry->modified) {
- value = (ini_entry->orig_value ? atoi(ini_entry->orig_value) : 0);
- } else if (ini_entry->value) {
- value = atoi(ini_entry->value);
- } else {
- value = 0;
- }
- if (value) {
- PUTS("On");
- } else {
- PUTS("Off");
- }
-}
-
-
-PHP_INI_DISP(php_ini_color_displayer_cb)
-{
- char *value;
-
- if (type==PHP_INI_DISPLAY_ORIG && ini_entry->modified) {
- value = ini_entry->orig_value;
- } else if (ini_entry->value) {
- value = ini_entry->value;
- } else {
- value = NULL;
- }
- if (value) {
- php_printf("<font color=\"%s\">%s</font>", value, value);
- } else {
- PUTS("<i>no value</i>;");
- }
-}
-
-
-PHP_INI_DISP(display_link_numbers)
-{
- char *value;
-
- if (type==PHP_INI_DISPLAY_ORIG && ini_entry->modified) {
- value = ini_entry->orig_value;
- } else if (ini_entry->value) {
- value = ini_entry->value;
- } else {
- value = NULL;
- }
-
- if (value) {
- if (atoi(value)==-1) {
- PUTS("Unlimited");
- } else {
- php_printf("%s", value);
- }
- }
-}
-
-
-static int php_ini_displayer(php_ini_entry *ini_entry, int module_number)
+static int php_ini_displayer(zend_ini_entry *ini_entry, int module_number)
{
if (ini_entry->module_number != module_number) {
return 0;
@@ -385,9 +60,9 @@ static int php_ini_displayer(php_ini_entry *ini_entry, int module_number)
PUTS("<TD BGCOLOR=\"" PHP_ENTRY_NAME_COLOR "\"><B>");
PHPWRITE(ini_entry->name, ini_entry->name_length-1);
PUTS("</B><BR></TD><TD ALIGN=\"center\">");
- php_ini_displayer_cb(ini_entry, PHP_INI_DISPLAY_ACTIVE);
+ php_ini_displayer_cb(ini_entry, ZEND_INI_DISPLAY_ACTIVE);
PUTS("</TD><TD ALIGN=\"center\">");
- php_ini_displayer_cb(ini_entry, PHP_INI_DISPLAY_ORIG);
+ php_ini_displayer_cb(ini_entry, ZEND_INI_DISPLAY_ORIG);
PUTS("</TD></TR>\n");
return 0;
}
@@ -399,138 +74,12 @@ PHPAPI void display_ini_entries(zend_module_entry *module)
if (module) {
module_number = module->module_number;
- } else {
+ } else {
module_number = 0;
}
php_info_print_table_start();
php_info_print_table_header(3, "Directive", "Local Value", "Master Value");
- zend_hash_apply_with_argument(&known_directives, (int (*)(void *, void *)) php_ini_displayer, (void *) (long) module_number);
+ /*zend_hash_apply_with_argument(&known_directives, (int (*)(void *, void *)) zend_ini_displayer, (void *) (long) module_number); */
php_info_print_table_end();
}
-
-PHPAPI int php_atoi(const char *str, int str_len)
-{
- int retval;
-
- if (!str_len) {
- str_len = strlen(str);
- }
- retval = atoi(str);
- if (str_len>0) {
- switch (str[str_len-1]) {
- case 'k':
- case 'K':
- retval *= 1024;
- break;
- case 'm':
- case 'M':
- retval *= 1048576;
- break;
- }
- }
- return retval;
-}
-
-
-/* Standard message handlers */
-
-PHPAPI PHP_INI_MH(OnUpdateBool)
-{
- zend_bool *p;
-#ifndef ZTS
- char *base = (char *) mh_arg2;
-#else
- char *base;
-
- base = (char *) ts_resource(*((int *) mh_arg2));
-#endif
-
- p = (zend_bool *) (base+(size_t) mh_arg1);
-
- *p = (zend_bool) atoi(new_value);
- return SUCCESS;
-}
-
-
-PHPAPI PHP_INI_MH(OnUpdateInt)
-{
- long *p;
-#ifndef ZTS
- char *base = (char *) mh_arg2;
-#else
- char *base;
-
- base = (char *) ts_resource(*((int *) mh_arg2));
-#endif
-
- p = (long *) (base+(size_t) mh_arg1);
-
- *p = php_atoi(new_value, new_value_length);
- return SUCCESS;
-}
-
-
-PHPAPI PHP_INI_MH(OnUpdateReal)
-{
- double *p;
-#ifndef ZTS
- char *base = (char *) mh_arg2;
-#else
- char *base;
-
- base = (char *) ts_resource(*((int *) mh_arg2));
-#endif
-
- p = (double *) (base+(size_t) mh_arg1);
-
- *p = strtod(new_value, NULL);
- return SUCCESS;
-}
-
-
-PHPAPI PHP_INI_MH(OnUpdateString)
-{
- char **p;
-#ifndef ZTS
- char *base = (char *) mh_arg2;
-#else
- char *base;
-
- base = (char *) ts_resource(*((int *) mh_arg2));
-#endif
-
- p = (char **) (base+(size_t) mh_arg1);
-
- *p = new_value;
- return SUCCESS;
-}
-
-
-PHPAPI PHP_INI_MH(OnUpdateStringUnempty)
-{
- char **p;
-#ifndef ZTS
- char *base = (char *) mh_arg2;
-#else
- char *base;
-
- base = (char *) ts_resource(*((int *) mh_arg2));
-#endif
-
- if (new_value && !new_value[0]) {
- return FAILURE;
- }
-
- p = (char **) (base+(size_t) mh_arg1);
-
- *p = new_value;
- return SUCCESS;
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
158 main/php_ini.h
View
@@ -19,141 +19,51 @@
#ifndef PHP_INI_H
#define PHP_INI_H
-#define PHP_INI_USER (1<<0)
-#define PHP_INI_PERDIR (1<<1)
-#define PHP_INI_SYSTEM (1<<2)
+#include "zend_ini.h"
-#define PHP_INI_ALL (PHP_INI_USER|PHP_INI_PERDIR|PHP_INI_SYSTEM)
+#define PHP_INI_USER ZEND_INI_USER
+#define PHP_INI_PERDIR ZEND_INI_PERDIR
+#define PHP_INI_SYSTEM ZEND_INI_SYSTEM
-typedef struct _php_ini_entry php_ini_entry;
+#define PHP_INI_ALL ZEND_INI_ALL
-#define PHP_INI_MH(name) int name(php_ini_entry *entry, char *new_value, uint new_value_length, void *mh_arg1, void *mh_arg2, void *mh_arg3, int stage)
-#define PHP_INI_DISP(name) void name(php_ini_entry *ini_entry, int type)
+#define php_ini_entry zend_ini_entry
-struct _php_ini_entry {
- int module_number;
- int modifyable;
- char *name;
- uint name_length;
- PHP_INI_MH((*on_modify));
- void *mh_arg1;
- void *mh_arg2;
- void *mh_arg3;
+#define PHP_INI_MH ZEND_INI_MH
+#define PHP_INI_DISP ZEND_INI_DISP
- char *value;
- uint value_length;
+#define PHP_INI_BEGIN ZEND_INI_BEGIN
+#define PHP_INI_END ZEND_INI_END
- char *orig_value;
- uint orig_value_length;
- int modified;
+#define PHP_INI_ENTRY3_EX ZEND_INI_ENTRY3_EX
+#define PHP_INI_ENTRY3 ZEND_INI_ENTRY3
+#define PHP_INI_ENTRY2_EX ZEND_INI_ENTRY2_EX
+#define PHP_INI_ENTRY2 ZEND_INI_ENTRY2
+#define PHP_INI_ENTRY1_EX ZEND_INI_ENTRY1_EX
+#define PHP_INI_ENTRY1 ZEND_INI_ENTRY1
+#define PHP_INI_ENTRY_EX ZEND_INI_ENTRY_EX
+#define PHP_INI_ENTRY ZEND_INI_ENTRY
- void (*displayer)(php_ini_entry *ini_entry, int type);
-};
+#define STD_PHP_INI_ENTRY STD_ZEND_INI_ENTRY
+#define STD_PHP_INI_ENTRY_EX STD_ZEND_INI_ENTRY_EX
+#define STD_PHP_INI_BOOLEAN STD_ZEND_INI_BOOLEAN
+#define PHP_INI_DISPLAY_ORIG ZEND_INI_DISPLAY_ORIG
+#define PHP_INI_DISPLAY_ACTIVE ZEND_INI_DISPLAY_ACTIVE
-int php_ini_mstartup(void);
-int php_ini_mshutdown(void);
-int php_ini_rshutdown(void);
+#define PHP_INI_STAGE_STARTUP ZEND_INI_STAGE_STARTUP
+#define PHP_INI_STAGE_SHUTDOWN ZEND_INI_STAGE_SHUTDOWN
+#define PHP_INI_STAGE_ACTIVATE ZEND_INI_STAGE_ACTIVATE
+#define PHP_INI_STAGE_DEACTIVATE ZEND_INI_STAGE_DEACTIVATE
+#define PHP_INI_STAGE_RUNTIME ZEND_INI_STAGE_RUNTIME
-void php_ini_sort_entries(void);
+#define php_ini_boolean_displayer_cb zend_ini_boolean_displayer_cb
+#define php_ini_color_displayer_cb zend_ini_color_displayer_cb
-PHPAPI int php_register_ini_entries(php_ini_entry *ini_entry, int module_number);
-PHPAPI void php_unregister_ini_entries(int module_number);
-PHPAPI void php_ini_refresh_caches(int stage);
-PHPAPI int php_alter_ini_entry(char *name, uint name_length, char *new_value, uint new_value_length, int modify_type, int stage);
-PHPAPI int php_restore_ini_entry(char *name, uint name_length, int stage);
-PHPAPI void display_ini_entries(zend_module_entry *module);
+#define php_alter_ini_entry zend_alter_ini_entry
-PHPAPI long php_ini_long(char *name, uint name_length, int orig);
-PHPAPI double php_ini_double(char *name, uint name_length, int orig);
-PHPAPI char *php_ini_string(char *name, uint name_length, int orig);
-php_ini_entry *get_ini_entry(char *name, uint name_length);
-
-PHPAPI int php_ini_register_displayer(char *name, uint name_length, void (*displayer)(php_ini_entry *ini_entry, int type));
-PHPAPI PHP_INI_DISP(php_ini_boolean_displayer_cb);
-PHPAPI PHP_INI_DISP(php_ini_color_displayer_cb);
-PHPAPI PHP_INI_DISP(display_link_numbers);
-
-#define PHP_INI_BEGIN() static php_ini_entry ini_entries[] = {
-#define PHP_INI_END() { 0, 0, NULL, 0, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, 0, NULL } };
-
-#define PHP_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, arg1, arg2, arg3, displayer) \
- { 0, modifyable, name, sizeof(name), on_modify, arg1, arg2, arg3, default_value, sizeof(default_value)-1, NULL, 0, 0, displayer },
-
-#define PHP_INI_ENTRY3(name, default_value, modifyable, on_modify, arg1, arg2, arg3) \
- PHP_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, arg1, arg2, arg3, NULL)
-
-#define PHP_INI_ENTRY2_EX(name, default_value, modifyable, on_modify, arg1, arg2, displayer) \
- PHP_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, arg1, arg2, NULL, displayer)
-
-#define PHP_INI_ENTRY2(name, default_value, modifyable, on_modify, arg1, arg2) \
- PHP_INI_ENTRY2_EX(name, default_value, modifyable, on_modify, arg1, arg2, NULL)
-
-#define PHP_INI_ENTRY1_EX(name, default_value, modifyable, on_modify, arg1, displayer) \
- PHP_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, arg1, NULL, NULL, displayer)
-
-#define PHP_INI_ENTRY1(name, default_value, modifyable, on_modify, arg1) \
- PHP_INI_ENTRY1_EX(name, default_value, modifyable, on_modify, arg1, NULL)
-
-#define PHP_INI_ENTRY_EX(name, default_value, modifyable, on_modify, displayer) \
- PHP_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, NULL, NULL, NULL, displayer)
-
-#define PHP_INI_ENTRY(name, default_value, modifyable, on_modify) \
- PHP_INI_ENTRY_EX(name, default_value, modifyable, on_modify, NULL)
-
-#ifdef ZTS
-#define STD_PHP_INI_ENTRY(name, default_value, modifyable, on_modify, property_name, struct_type, struct_ptr) \
- PHP_INI_ENTRY2(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr##_id)
-#define STD_PHP_INI_ENTRY_EX(name, default_value, modifyable, on_modify, property_name, struct_type, struct_ptr, displayer) \
- PHP_INI_ENTRY2_EX(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr##_id, displayer)
-#define STD_PHP_INI_BOOLEAN(name, default_value, modifyable, on_modify, property_name, struct_type, struct_ptr) \
- PHP_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr##_id, NULL, php_ini_boolean_displayer_cb)
-#else
-#define STD_PHP_INI_ENTRY(name, default_value, modifyable, on_modify, property_name, struct_type, struct_ptr) \
- PHP_INI_ENTRY2(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr)
-#define STD_PHP_INI_ENTRY_EX(name, default_value, modifyable, on_modify, property_name, struct_type, struct_ptr, displayer) \
- PHP_INI_ENTRY2_EX(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr, displayer)
-#define STD_PHP_INI_BOOLEAN(name, default_value, modifyable, on_modify, property_name, struct_type, struct_ptr) \
- PHP_INI_ENTRY3_EX(name, default_value, modifyable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr, NULL, php_ini_boolean_displayer_cb)
-#endif
-
-#define INI_INT(name) php_ini_long((name), sizeof(name), 0)
-#define INI_FLT(name) php_ini_double((name), sizeof(name), 0)
-#define INI_STR(name) php_ini_string((name), sizeof(name), 0)
-#define INI_BOOL(name) ((zend_bool) INI_INT(name))
-
-#define INI_ORIG_INT(name) php_ini_long((name), sizeof(name), 1)
-#define INI_ORIG_FLT(name) php_ini_double((name), sizeof(name), 1)
-#define INI_ORIG_STR(name) php_ini_string((name), sizeof(name), 1)
-#define INI_ORIG_BOOL(name) ((zend_bool) INI_ORIG_INT(name))
-
-
-#define REGISTER_INI_ENTRIES() php_register_ini_entries(ini_entries, module_number)
-#define UNREGISTER_INI_ENTRIES() php_unregister_ini_entries(module_number)
-#define DISPLAY_INI_ENTRIES() display_ini_entries(zend_module)
-
-#define REGISTER_INI_DISPLAYER(name, displayer) php_ini_register_displayer((name), sizeof(name), displayer)
-#define REGISTER_INI_BOOLEAN(name) REGISTER_INI_DISPLAYER(name, php_ini_boolean_displayer_cb)
-
-pval *cfg_get_entry(char *name, uint name_length);
-
-PHPAPI int php_atoi(const char *str, int str_len);
-
-/* Standard message handlers */
-PHPAPI PHP_INI_MH(OnUpdateBool);
-PHPAPI PHP_INI_MH(OnUpdateInt);
-PHPAPI PHP_INI_MH(OnUpdateReal);
-PHPAPI PHP_INI_MH(OnUpdateString);
-PHPAPI PHP_INI_MH(OnUpdateStringUnempty);
-
-
-#define PHP_INI_DISPLAY_ORIG 1
-#define PHP_INI_DISPLAY_ACTIVE 2
-
-#define PHP_INI_STAGE_STARTUP (1<<0)
-#define PHP_INI_STAGE_SHUTDOWN (1<<1)
-#define PHP_INI_STAGE_ACTIVATE (1<<2)
-#define PHP_INI_STAGE_DEACTIVATE (1<<3)
-#define PHP_INI_STAGE_RUNTIME (1<<4)
+#define php_ini_long zend_ini_long
+#define php_ini_double zend_ini_double
+#define php_ini_string zend_ini_string
#endif /* PHP_INI_H */
2  sapi/aolserver/aolserver.c
View
@@ -559,7 +559,7 @@ php_ns_config(php_ns_context *ctx, char global)
} while(*val == ' ');
Ns_Log(Debug, "PHP configuration option '%s=%s'", new_key, val);
- php_alter_ini_entry(new_key, strlen(new_key) + 1, val,
+ zend_alter_ini_entry(new_key, strlen(new_key) + 1, val,
strlen(val) + 1, PHP_INI_SYSTEM, PHP_INI_STAGE_RUNTIME);
efree(new_key);
2  sapi/apache/mod_php4.c
View
@@ -415,7 +415,7 @@ static void init_request_info(SLS_D)
static int php_apache_alter_ini_entries(php_per_dir_entry *per_dir_entry)
{
- php_alter_ini_entry(per_dir_entry->key, per_dir_entry->key_length+1, per_dir_entry->value, per_dir_entry->value_length+1, per_dir_entry->type, PHP_INI_STAGE_ACTIVATE);
+ zend_alter_ini_entry(per_dir_entry->key, per_dir_entry->key_length+1, per_dir_entry->value, per_dir_entry->value_length+1, per_dir_entry->type, PHP_INI_STAGE_ACTIVATE);
return 0;
}
2  sapi/apache2/mod_php4.c
View
@@ -409,7 +409,7 @@ static void init_request_info(SLS_D)
static int php_apache_alter_ini_entries(php_per_dir_entry *per_dir_entry)
{
- php_alter_ini_entry(per_dir_entry->key, per_dir_entry->key_length+1, per_dir_entry->value, per_dir_entry->value_length+1, per_dir_entry->type, PHP_INI_STAGE_ACTIVATE);
+ zend_alter_ini_entry(per_dir_entry->key, per_dir_entry->key_length+1, per_dir_entry->value, per_dir_entry->value_length+1, per_dir_entry->type, PHP_INI_STAGE_ACTIVATE);
return 0;
}
2  sapi/apache2filter/apache_config.c
View
@@ -94,7 +94,7 @@ void apply_config(void *dummy)
zend_hash_move_forward(&d->config)) {
zend_hash_get_current_data(&d->config, &data);
fprintf(stderr, "APPLYING (%s)(%s)\n", str, data->value);
- if (php_alter_ini_entry(str, str_len, data->value, data->value_len + 1,
+ if (zend_alter_ini_entry(str, str_len, data->value, data->value_len + 1,
data->status, PHP_INI_STAGE_RUNTIME) == FAILURE)
fprintf(stderr, "..FAILED\n");
}
2  sapi/cgi/cgi_main.c
View
@@ -346,7 +346,7 @@ static void define_command_line_ini_entry(char *arg)
} else {
value = "1";
}
- php_alter_ini_entry(name, strlen(name), value, strlen(value), PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE);
+ zend_alter_ini_entry(name, strlen(name), value, strlen(value), PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE);
}
2  win32/registry.c
View
@@ -69,7 +69,7 @@ void UpdateIniFromRegistry(char *path)
continue;
}
/*printf("%s -> %s\n", namebuf, valuebuf);*/
- php_alter_ini_entry(namebuf, namebuf_length+1, valuebuf, valuebuf_length+1, PHP_INI_PERDIR, PHP_INI_STAGE_ACTIVATE);
+ zend_alter_ini_entry(namebuf, namebuf_length+1, valuebuf, valuebuf_length+1, PHP_INI_PERDIR, PHP_INI_STAGE_ACTIVATE);
}
RegCloseKey(hKey);
Please sign in to comment.
Something went wrong with that request. Please try again.