summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2002-12-16 15:43:52 +0000
committerIlia Alshanetsky <iliaa@php.net>2002-12-16 15:43:52 +0000
commit5bad812dad24b9a6816ba77b42fc5e0aa82b7d74 (patch)
tree32a659e0dfc80eb7d8dddb3769c3408006ad4252
parent2d3b3fd97fb5f47b209a0df99ed4dc1348aea3b6 (diff)
downloadphp-git-5bad812dad24b9a6816ba77b42fc5e0aa82b7d74.tar.gz
A better, strtok() free implementaion of php_disable_functions().
-rw-r--r--main/main.c39
1 files changed, 30 insertions, 9 deletions
diff --git a/main/main.c b/main/main.c
index 0005dd3274..9980df420f 100644
--- a/main/main.c
+++ b/main/main.c
@@ -168,15 +168,36 @@ static PHP_INI_MH(OnChangeMemoryLimit)
*/
static void php_disable_functions(TSRMLS_D)
{
- char *func;
- char *new_value_dup = strdup(INI_STR("disable_functions")); /* This is an intentional leak,
- * it's not a big deal as it's process-wide
- */
-
- func = strtok(new_value_dup, ", ");
- while (func) {
- zend_disable_function(func, strlen(func) TSRMLS_CC);
- func = strtok(NULL, ", ");
+ char *s = NULL;
+ char *e = INI_STR("disable_functions");
+ char p;
+
+ if (!*e) {
+ return;
+ }
+
+ while (*e) {
+ switch (*e) {
+ case ' ':
+ case ',':
+ if (s) {
+ p = *e;
+ *e = '\0';
+ zend_disable_function(s, e-s TSRMLS_CC);
+ *e = p;
+ s = NULL;
+ }
+ break;
+ default:
+ if (!s) {
+ s = e;
+ }
+ break;
+ }
+ e++;
+ }
+ if (s) {
+ zend_disable_function(s, e-s TSRMLS_CC);
}
}
/* }}} */