mirror of
https://github.com/php/php-src.git
synced 2024-09-24 19:37:26 +00:00
149 lines
3.0 KiB
C
149 lines
3.0 KiB
C
|
#include <stdlib.h>
|
||
|
|
||
|
#include "php.h"
|
||
|
#include "php_ini.h"
|
||
|
#include "zend_alloc.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(zend_ini_entry *ini_entry)
|
||
|
{
|
||
|
if (ini_entry->modified) {
|
||
|
efree(ini_entry->value);
|
||
|
ini_entry->value = ini_entry->orig_value;
|
||
|
ini_entry->value_length = ini_entry->orig_value_length;
|
||
|
ini_entry->modified = 0;
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Startup / shutdown
|
||
|
*/
|
||
|
int zend_ini_mstartup()
|
||
|
{
|
||
|
if (_php3_hash_init(&known_directives, 100, NULL, NULL, 1)==FAILURE) {
|
||
|
return FAILURE;
|
||
|
}
|
||
|
return SUCCESS;
|
||
|
}
|
||
|
|
||
|
|
||
|
int zend_ini_mshutdown()
|
||
|
{
|
||
|
_php3_hash_destroy(&known_directives);
|
||
|
return SUCCESS;
|
||
|
}
|
||
|
|
||
|
|
||
|
int zend_ini_rshutdown()
|
||
|
{
|
||
|
_php3_hash_apply(&known_directives, (int (*)(void *)) zend_restore_ini_entry);
|
||
|
return SUCCESS;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Registration / unregistration
|
||
|
*/
|
||
|
|
||
|
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;
|
||
|
pval *default_value;
|
||
|
|
||
|
while (p->name) {
|
||
|
p->module_number = module_number;
|
||
|
if (_php3_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))) {
|
||
|
hashed_ini_entry->value = default_value->value.str.val;
|
||
|
hashed_ini_entry->value_length = default_value->value.str.len;
|
||
|
}
|
||
|
hashed_ini_entry->modified = 0;
|
||
|
p++;
|
||
|
}
|
||
|
return SUCCESS;
|
||
|
}
|
||
|
|
||
|
|
||
|
void zend_unregister_ini_entries(int module_number)
|
||
|
{
|
||
|
_php3_hash_apply_with_argument(&known_directives, (int (*)(void *, void *)) zend_remove_ini_entries, (void *) &module_number);
|
||
|
}
|
||
|
|
||
|
int zend_alter_ini_entry(char *name, uint name_length, char *new_value, uint new_value_length, int modify_type)
|
||
|
{
|
||
|
zend_ini_entry *ini_entry;
|
||
|
|
||
|
if (_php3_hash_find(&known_directives, name, name_length, (void **) &ini_entry)==FAILURE) {
|
||
|
return FAILURE;
|
||
|
}
|
||
|
|
||
|
if (!(ini_entry->modifyable & modify_type)) {
|
||
|
return FAILURE;
|
||
|
}
|
||
|
|
||
|
ini_entry->value = estrndup(new_value, new_value_length);
|
||
|
ini_entry->value_length = new_value_length;
|
||
|
ini_entry->modified = 1;
|
||
|
|
||
|
return SUCCESS;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Data retrieval
|
||
|
*/
|
||
|
|
||
|
long zend_ini_long(char *name, uint name_length)
|
||
|
{
|
||
|
zend_ini_entry *ini_entry;
|
||
|
|
||
|
if (_php3_hash_find(&known_directives, name, name_length, (void **) &ini_entry)==SUCCESS) {
|
||
|
return (long) atoi(ini_entry->value);
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
double zend_ini_double(char *name, uint name_length)
|
||
|
{
|
||
|
zend_ini_entry *ini_entry;
|
||
|
|
||
|
if (_php3_hash_find(&known_directives, name, name_length, (void **) &ini_entry)==SUCCESS) {
|
||
|
return (double) strtod(ini_entry->value, NULL);
|
||
|
}
|
||
|
|
||
|
return 0.0;
|
||
|
}
|
||
|
|
||
|
|
||
|
char *zend_ini_string(char *name, uint name_length)
|
||
|
{
|
||
|
zend_ini_entry *ini_entry;
|
||
|
|
||
|
if (_php3_hash_find(&known_directives, name, name_length, (void **) &ini_entry)==SUCCESS) {
|
||
|
return ini_entry->value;
|
||
|
}
|
||
|
|
||
|
return "";
|
||
|
}
|