]> git.pld-linux.org Git - packages/php.git/blame - php-config-file-scan-dir.patch
up to 5.4.15
[packages/php.git] / php-config-file-scan-dir.patch
CommitLineData
b4025702
ER
1--- php-5.4.0RC3/main/php_ini.c~ 2011-12-10 03:26:15.000000000 +0200
2+++ php-5.4.0RC3/main/php_ini.c 2011-12-10 03:26:54.901295707 +0200
3@@ -376,6 +376,7 @@
c0240cb1 4 char *open_basedir;
5 int free_ini_search_path = 0;
6 zend_file_handle fh;
c0240cb1 7+ static const char paths_separator[] = { ZEND_PATHS_SEPARATOR, 0 };
b4025702 8
c0240cb1 9 if (zend_hash_init(&configuration_hash, 0, NULL, (dtor_func_t) config_zval_dtor, 1) == FAILURE) {
10 return FAILURE;
b4025702
ER
11@@ -398,7 +399,6 @@
12 int search_path_size;
c0240cb1 13 char *default_location;
14 char *env_location;
c0240cb1 15- static const char paths_separator[] = { ZEND_PATHS_SEPARATOR, 0 };
16 #ifdef PHP_WIN32
17 char *reg_location;
18 char phprc_path[MAXPATHLEN];
19@@ -608,72 +608,86 @@
20
21 /* Scan and parse any .ini files found in scan path if path not empty. */
22 if (!sapi_module.php_ini_ignore && php_ini_scanned_path_len) {
23- struct dirent **namelist;
24 int ndir, i;
25 struct stat sb;
26 char ini_file[MAXPATHLEN];
27- char *p;
28+ char *p, *last, *path_copy, *ini_path = NULL;
29 zend_file_handle fh2;
30 zend_llist scanned_ini_list;
31 zend_llist_element *element;
32 int l, total_l = 0;
33
34- if ((ndir = php_scandir(php_ini_scanned_path, &namelist, 0, php_alphasort)) > 0) {
35- zend_llist_init(&scanned_ini_list, sizeof(char *), (llist_dtor_func_t) free_estring, 1);
36- memset(&fh2, 0, sizeof(fh2));
37-
38- for (i = 0; i < ndir; i++) {
39-
40- /* check for any file with .ini extension */
41- if (!(p = strrchr(namelist[i]->d_name, '.')) || (p && strcmp(p, ".ini"))) {
42- free(namelist[i]);
43- continue;
44- }
45- /* Reset active ini section */
46- RESET_ACTIVE_INI_HASH();
47-
48- if (IS_SLASH(php_ini_scanned_path[php_ini_scanned_path_len - 1])) {
49- snprintf(ini_file, MAXPATHLEN, "%s%s", php_ini_scanned_path, namelist[i]->d_name);
50- } else {
51- snprintf(ini_file, MAXPATHLEN, "%s%c%s", php_ini_scanned_path, DEFAULT_SLASH, namelist[i]->d_name);
52- }
53- if (VCWD_STAT(ini_file, &sb) == 0) {
54- if (S_ISREG(sb.st_mode)) {
55- if ((fh2.handle.fp = VCWD_FOPEN(ini_file, "r"))) {
56- fh2.filename = ini_file;
57- fh2.type = ZEND_HANDLE_FP;
58-
59- if (zend_parse_ini_file(&fh2, 1, ZEND_INI_SCANNER_NORMAL, (zend_ini_parser_cb_t) php_ini_parser_cb, &configuration_hash TSRMLS_CC) == SUCCESS) {
60- /* Here, add it to the list of ini files read */
61- l = strlen(ini_file);
62- total_l += l + 2;
63- p = estrndup(ini_file, l);
64- zend_llist_add_element(&scanned_ini_list, &p);
65+ /* List of found ini files */
66+ zend_llist_init(&scanned_ini_list, sizeof(char *), (llist_dtor_func_t) free_estring, 1);
b4025702 67+
c0240cb1 68+ /* Split by paths_separator and load ini-files from all paths */
69+ path_copy = estrdup(php_ini_scanned_path);
70+ ini_path = php_strtok_r(path_copy, paths_separator, &last);
71+
72+ while (ini_path != NULL) {
73+ struct dirent **namelist;
74+ int ini_path_len = strlen(ini_path);
75+
76+ if ((ndir = php_scandir(ini_path, &namelist, 0, php_alphasort)) > 0) {
77+ memset(&fh2, 0, sizeof(fh2));
78+
79+ for (i = 0; i < ndir; i++) {
80+ /* check for any file with .ini extension */
81+ if (!(p = strrchr(namelist[i]->d_name, '.')) || (p && strcmp(p, ".ini"))) {
82+ free(namelist[i]);
83+ continue;
84+ }
85+ /* Reset active ini section */
86+ RESET_ACTIVE_INI_HASH();
87+
88+ if (IS_SLASH(ini_path[ini_path_len - 1])) {
89+ snprintf(ini_file, MAXPATHLEN, "%s%s", ini_path, namelist[i]->d_name);
90+ } else {
91+ snprintf(ini_file, MAXPATHLEN, "%s%c%s", ini_path, DEFAULT_SLASH, namelist[i]->d_name);
b4025702 92+ }
c0240cb1 93+ if (VCWD_STAT(ini_file, &sb) == 0) {
94+ if (S_ISREG(sb.st_mode)) {
95+ if ((fh2.handle.fp = VCWD_FOPEN(ini_file, "r"))) {
96+ fh2.filename = ini_file;
97+ fh2.type = ZEND_HANDLE_FP;
b4025702 98+
c0240cb1 99+ /* Reset active ini section */
100+ RESET_ACTIVE_INI_HASH();
101+
102+ if (zend_parse_ini_file(&fh2, 1, ZEND_INI_SCANNER_NORMAL, (zend_ini_parser_cb_t) php_ini_parser_cb, &configuration_hash TSRMLS_CC) == SUCCESS) {
103+ /* Here, add it to the list of ini files read */
104+ l = strlen(ini_file);
105+ total_l += l + 2;
106+ p = estrndup(ini_file, l);
107+ zend_llist_add_element(&scanned_ini_list, &p);
108+ }
109 }
110 }
111 }
112+ free(namelist[i]);
113 }
114- free(namelist[i]);
115+ free(namelist);
116 }
117- free(namelist);
118-
119- if (total_l) {
120- int php_ini_scanned_files_len = (php_ini_scanned_files) ? strlen(php_ini_scanned_files) + 1 : 0;
121- php_ini_scanned_files = (char *) realloc(php_ini_scanned_files, php_ini_scanned_files_len + total_l + 1);
122- if (!php_ini_scanned_files_len) {
123- *php_ini_scanned_files = '\0';
124- }
125- total_l += php_ini_scanned_files_len;
126- for (element = scanned_ini_list.head; element; element = element->next) {
127- if (php_ini_scanned_files_len) {
128- strlcat(php_ini_scanned_files, ",\n", total_l);
129- }
130- strlcat(php_ini_scanned_files, *(char **)element->data, total_l);
131- strlcat(php_ini_scanned_files, element->next ? ",\n" : "\n", total_l);
132+ ini_path = php_strtok_r(NULL, paths_separator, &last);
133+ }
b4025702 134+
c0240cb1 135+ if (total_l) {
136+ int php_ini_scanned_files_len = (php_ini_scanned_files) ? strlen(php_ini_scanned_files) + 1 : 0;
137+ php_ini_scanned_files = (char *) realloc(php_ini_scanned_files, php_ini_scanned_files_len + total_l + 1);
138+ if (!php_ini_scanned_files_len) {
139+ *php_ini_scanned_files = '\0';
140+ }
141+ total_l += php_ini_scanned_files_len;
142+ for (element = scanned_ini_list.head; element; element = element->next) {
143+ if (php_ini_scanned_files_len) {
144+ strlcat(php_ini_scanned_files, ",\n", total_l);
145 }
146+ strlcat(php_ini_scanned_files, *(char **)element->data, total_l);
147+ strlcat(php_ini_scanned_files, element->next ? ",\n" : "\n", total_l);
148 }
149- zend_llist_destroy(&scanned_ini_list);
150 }
151+ efree(path_copy);
152+ zend_llist_destroy(&scanned_ini_list);
153 } else {
154 /* Make sure an empty php_ini_scanned_path ends up as NULL */
155 php_ini_scanned_path = NULL;
This page took 0.07211 seconds and 4 git commands to generate.