Coverage Report

Created: 2022-10-14 11:23

/src/php-src/Zend/zend_ini.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
   +----------------------------------------------------------------------+
3
   | Zend Engine                                                          |
4
   +----------------------------------------------------------------------+
5
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
6
   +----------------------------------------------------------------------+
7
   | This source file is subject to version 2.00 of the Zend license,     |
8
   | that is bundled with this package in the file LICENSE, and is        |
9
   | available through the world-wide-web at the following url:           |
10
   | http://www.zend.com/license/2_00.txt.                                |
11
   | If you did not receive a copy of the Zend license and are unable to  |
12
   | obtain it through the world-wide-web, please send a note to          |
13
   | license@zend.com so we can mail you a copy immediately.              |
14
   +----------------------------------------------------------------------+
15
   | Author: Zeev Suraski <zeev@php.net>                                  |
16
   +----------------------------------------------------------------------+
17
*/
18
19
#ifndef ZEND_INI_H
20
#define ZEND_INI_H
21
22
0
#define ZEND_INI_USER (1<<0)
23
0
#define ZEND_INI_PERDIR (1<<1)
24
0
#define ZEND_INI_SYSTEM (1<<2)
25
26
0
#define ZEND_INI_ALL (ZEND_INI_USER|ZEND_INI_PERDIR|ZEND_INI_SYSTEM)
27
28
#define ZEND_INI_MH(name) int name(zend_ini_entry *entry, zend_string *new_value, void *mh_arg1, void *mh_arg2, void *mh_arg3, int stage)
29
#define ZEND_INI_DISP(name) ZEND_COLD void name(zend_ini_entry *ini_entry, int type)
30
31
typedef struct _zend_ini_entry_def {
32
  const char *name;
33
  ZEND_INI_MH((*on_modify));
34
  void *mh_arg1;
35
  void *mh_arg2;
36
  void *mh_arg3;
37
  const char *value;
38
  void (*displayer)(zend_ini_entry *ini_entry, int type);
39
40
  uint32_t value_length;
41
  uint16_t name_length;
42
  uint8_t modifiable;
43
} zend_ini_entry_def;
44
45
struct _zend_ini_entry {
46
  zend_string *name;
47
  ZEND_INI_MH((*on_modify));
48
  void *mh_arg1;
49
  void *mh_arg2;
50
  void *mh_arg3;
51
  zend_string *value;
52
  zend_string *orig_value;
53
  void (*displayer)(zend_ini_entry *ini_entry, int type);
54
55
  int module_number;
56
57
  uint8_t modifiable;
58
  uint8_t orig_modifiable;
59
  uint8_t modified;
60
61
};
62
63
BEGIN_EXTERN_C()
64
ZEND_API int zend_ini_startup(void);
65
ZEND_API int zend_ini_shutdown(void);
66
ZEND_API int zend_ini_global_shutdown(void);
67
ZEND_API int zend_ini_deactivate(void);
68
ZEND_API void zend_ini_dtor(HashTable *ini_directives);
69
70
ZEND_API int zend_copy_ini_directives(void);
71
72
ZEND_API void zend_ini_sort_entries(void);
73
74
ZEND_API int zend_register_ini_entries(const zend_ini_entry_def *ini_entry, int module_number);
75
ZEND_API void zend_unregister_ini_entries(int module_number);
76
ZEND_API void zend_ini_refresh_caches(int stage);
77
ZEND_API int zend_alter_ini_entry(zend_string *name, zend_string *new_value, int modify_type, int stage);
78
ZEND_API int zend_alter_ini_entry_ex(zend_string *name, zend_string *new_value, int modify_type, int stage, int force_change);
79
ZEND_API int zend_alter_ini_entry_chars(zend_string *name, const char *value, size_t value_length, int modify_type, int stage);
80
ZEND_API int zend_alter_ini_entry_chars_ex(zend_string *name, const char *value, size_t value_length, int modify_type, int stage, int force_change);
81
ZEND_API int zend_restore_ini_entry(zend_string *name, int stage);
82
ZEND_API void display_ini_entries(zend_module_entry *module);
83
84
ZEND_API zend_long zend_ini_long(const char *name, size_t name_length, int orig);
85
ZEND_API double zend_ini_double(const char *name, size_t name_length, int orig);
86
ZEND_API char *zend_ini_string(const char *name, size_t name_length, int orig);
87
ZEND_API char *zend_ini_string_ex(const char *name, size_t name_length, int orig, zend_bool *exists);
88
ZEND_API zend_string *zend_ini_get_value(zend_string *name);
89
ZEND_API zend_bool zend_ini_parse_bool(zend_string *str);
90
91
ZEND_API int zend_ini_register_displayer(const char *name, uint32_t name_length, void (*displayer)(zend_ini_entry *ini_entry, int type));
92
93
ZEND_API ZEND_INI_DISP(zend_ini_boolean_displayer_cb);
94
ZEND_API ZEND_INI_DISP(zend_ini_color_displayer_cb);
95
ZEND_API ZEND_INI_DISP(display_link_numbers);
96
END_EXTERN_C()
97
98
#define ZEND_INI_BEGIN()    static const zend_ini_entry_def ini_entries[] = {
99
#define ZEND_INI_END()    { NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0} };
100
101
#define ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, arg2, arg3, displayer) \
102
  { name, on_modify, arg1, arg2, arg3, default_value, displayer, sizeof(default_value)-1, sizeof(name)-1, modifiable },
103
104
#define ZEND_INI_ENTRY3(name, default_value, modifiable, on_modify, arg1, arg2, arg3) \
105
  ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, arg2, arg3, NULL)
106
107
#define ZEND_INI_ENTRY2_EX(name, default_value, modifiable, on_modify, arg1, arg2, displayer) \
108
  ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, arg2, NULL, displayer)
109
110
#define ZEND_INI_ENTRY2(name, default_value, modifiable, on_modify, arg1, arg2) \
111
  ZEND_INI_ENTRY2_EX(name, default_value, modifiable, on_modify, arg1, arg2, NULL)
112
113
#define ZEND_INI_ENTRY1_EX(name, default_value, modifiable, on_modify, arg1, displayer) \
114
  ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, NULL, NULL, displayer)
115
116
#define ZEND_INI_ENTRY1(name, default_value, modifiable, on_modify, arg1) \
117
  ZEND_INI_ENTRY1_EX(name, default_value, modifiable, on_modify, arg1, NULL)
118
119
#define ZEND_INI_ENTRY_EX(name, default_value, modifiable, on_modify, displayer) \
120
  ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, NULL, NULL, NULL, displayer)
121
122
#define ZEND_INI_ENTRY(name, default_value, modifiable, on_modify) \
123
  ZEND_INI_ENTRY_EX(name, default_value, modifiable, on_modify, NULL)
124
125
#ifdef ZTS
126
#define STD_ZEND_INI_ENTRY(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr) \
127
  ZEND_INI_ENTRY2(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr##_id)
128
#define STD_ZEND_INI_ENTRY_EX(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr, displayer) \
129
  ZEND_INI_ENTRY2_EX(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr##_id, displayer)
130
#define STD_ZEND_INI_BOOLEAN(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr) \
131
  ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr##_id, NULL, zend_ini_boolean_displayer_cb)
132
#else
133
#define STD_ZEND_INI_ENTRY(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr) \
134
  ZEND_INI_ENTRY2(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr)
135
#define STD_ZEND_INI_ENTRY_EX(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr, displayer) \
136
  ZEND_INI_ENTRY2_EX(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr, displayer)
137
#define STD_ZEND_INI_BOOLEAN(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr) \
138
  ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr, NULL, zend_ini_boolean_displayer_cb)
139
#endif
140
141
0
#define INI_INT(name) zend_ini_long((name), strlen(name), 0)
142
0
#define INI_FLT(name) zend_ini_double((name), strlen(name), 0)
143
10.4k
#define INI_STR(name) zend_ini_string_ex((name), strlen(name), 0, NULL)
144
#define INI_BOOL(name) ((zend_bool) INI_INT(name))
145
146
#define INI_ORIG_INT(name)  zend_ini_long((name), strlen(name), 1)
147
#define INI_ORIG_FLT(name)  zend_ini_double((name), strlen(name), 1)
148
#define INI_ORIG_STR(name)  zend_ini_string((name), strlen(name), 1)
149
#define INI_ORIG_BOOL(name) ((zend_bool) INI_ORIG_INT(name))
150
151
38.2k
#define REGISTER_INI_ENTRIES() zend_register_ini_entries(ini_entries, module_number)
152
0
#define UNREGISTER_INI_ENTRIES() zend_unregister_ini_entries(module_number)
153
0
#define DISPLAY_INI_ENTRIES() display_ini_entries(zend_module)
154
155
#define REGISTER_INI_DISPLAYER(name, displayer) zend_ini_register_displayer((name), strlen(name), displayer)
156
#define REGISTER_INI_BOOLEAN(name) REGISTER_INI_DISPLAYER(name, zend_ini_boolean_displayer_cb)
157
158
/* Standard message handlers */
159
BEGIN_EXTERN_C()
160
ZEND_API ZEND_INI_MH(OnUpdateBool);
161
ZEND_API ZEND_INI_MH(OnUpdateLong);
162
ZEND_API ZEND_INI_MH(OnUpdateLongGEZero);
163
ZEND_API ZEND_INI_MH(OnUpdateReal);
164
ZEND_API ZEND_INI_MH(OnUpdateString);
165
ZEND_API ZEND_INI_MH(OnUpdateStringUnempty);
166
END_EXTERN_C()
167
168
0
#define ZEND_INI_DISPLAY_ORIG 1
169
0
#define ZEND_INI_DISPLAY_ACTIVE 2
170
171
406k
#define ZEND_INI_STAGE_STARTUP    (1<<0)
172
6.95k
#define ZEND_INI_STAGE_SHUTDOWN   (1<<1)
173
3.47k
#define ZEND_INI_STAGE_ACTIVATE   (1<<2)
174
0
#define ZEND_INI_STAGE_DEACTIVATE (1<<3)
175
17.3k
#define ZEND_INI_STAGE_RUNTIME    (1<<4)
176
10.4k
#define ZEND_INI_STAGE_HTACCESS   (1<<5)
177
178
0
#define ZEND_INI_STAGE_IN_REQUEST   (ZEND_INI_STAGE_ACTIVATE|ZEND_INI_STAGE_DEACTIVATE|ZEND_INI_STAGE_RUNTIME|ZEND_INI_STAGE_HTACCESS)
179
180
/* INI parsing engine */
181
typedef void (*zend_ini_parser_cb_t)(zval *arg1, zval *arg2, zval *arg3, int callback_type, void *arg);
182
BEGIN_EXTERN_C()
183
ZEND_API int zend_parse_ini_file(zend_file_handle *fh, zend_bool unbuffered_errors, int scanner_mode, zend_ini_parser_cb_t ini_parser_cb, void *arg);
184
ZEND_API int zend_parse_ini_string(char *str, zend_bool unbuffered_errors, int scanner_mode, zend_ini_parser_cb_t ini_parser_cb, void *arg);
185
END_EXTERN_C()
186
187
/* INI entries */
188
41.7k
#define ZEND_INI_PARSER_ENTRY     1 /* Normal entry: foo = bar */
189
0
#define ZEND_INI_PARSER_SECTION   2 /* Section: [foobar] */
190
0
#define ZEND_INI_PARSER_POP_ENTRY 3 /* Offset entry: foo[] = bar */
191
192
typedef struct _zend_ini_parser_param {
193
  zend_ini_parser_cb_t ini_parser_cb;
194
  void *arg;
195
} zend_ini_parser_param;
196
197
#ifndef ZTS
198
306k
# define ZEND_INI_GET_BASE() ((char *) mh_arg2)
199
#else
200
# define ZEND_INI_GET_BASE() ((char *) ts_resource(*((int *) mh_arg2)))
201
#endif
202
203
306k
#define ZEND_INI_GET_ADDR() (ZEND_INI_GET_BASE() + (size_t) mh_arg1)
204
205
#endif /* ZEND_INI_H */