]> granicus.if.org Git - php/commitdiff
* php_ini fixes
authorZeev Suraski <zeev@php.net>
Sat, 10 Apr 1999 00:19:33 +0000 (00:19 +0000)
committerZeev Suraski <zeev@php.net>
Sat, 10 Apr 1999 00:19:33 +0000 (00:19 +0000)
* convert the MySQL module to use the new php_ini mechanism

main/php_ini.c

index e57db71a694e797777e64f847e4d1b0f2dd89484..8b36129a0d356279a58f683a5c5cddaca9758298 100644 (file)
@@ -132,6 +132,7 @@ void php_unregister_ini_entries(int module_number)
 int php_alter_ini_entry(char *name, uint name_length, char *new_value, uint new_value_length, int modify_type)
 {
        php_ini_entry *ini_entry;
+       char *duplicate;
 
        if (_php3_hash_find(&known_directives, name, name_length, (void **) &ini_entry)==FAILURE) {
                return FAILURE;
@@ -141,17 +142,21 @@ int php_alter_ini_entry(char *name, uint name_length, char *new_value, uint new_
                return FAILURE;
        }
 
+       duplicate = estrndup(new_value, new_value_length);
+       
        if (!ini_entry->on_modify
-               || ini_entry->on_modify(ini_entry, new_value, new_value_length, ini_entry->mh_arg)==SUCCESS) {
+               || ini_entry->on_modify(ini_entry, duplicate, new_value_length, ini_entry->mh_arg)==SUCCESS) {
                if (!ini_entry->orig_value) {
                        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 = estrndup(new_value, new_value_length);
+               ini_entry->value = duplicate;
                ini_entry->value_length = new_value_length;
                ini_entry->modified = 1;
+       } else {
+               efree(duplicate);
        }
 
        return SUCCESS;