Skip to content

Commit 989f0ae

Browse files
committed
Add php.ini setting v8js.icudtl_dat_path
1 parent 73e1f3c commit 989f0ae

File tree

3 files changed

+35
-9
lines changed

3 files changed

+35
-9
lines changed

php_v8js_macros.h

+3
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,9 @@ struct _v8js_process_globals {
156156
/* V8 command line flags */
157157
char *v8_flags;
158158

159+
/* Path to icudtl.dat file */
160+
char *icudtl_dat_path;
161+
159162
v8::Platform *v8_platform;
160163
};
161164

v8js_main.cc

+22-6
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ struct _v8js_process_globals v8js_process_globals;
3333

3434
/* {{{ INI Settings */
3535

36-
static ZEND_INI_MH(v8js_OnUpdateV8Flags) /* {{{ */
36+
static bool v8js_ini_string(char **field, const zend_string *new_value)/* {{{ */
3737
{
3838
bool immutable = false;
3939

@@ -56,18 +56,33 @@ static ZEND_INI_MH(v8js_OnUpdateV8Flags) /* {{{ */
5656
}
5757

5858
if (new_value) {
59-
if (v8js_process_globals.v8_flags) {
60-
free(v8js_process_globals.v8_flags);
61-
v8js_process_globals.v8_flags = NULL;
59+
if (*field) {
60+
free(*field);
61+
*field = NULL;
6262
}
63+
6364
if (!ZSTR_VAL(new_value)[0]) {
64-
return FAILURE;
65+
return SUCCESS;
6566
}
66-
v8js_process_globals.v8_flags = zend_strndup(ZSTR_VAL(new_value), ZSTR_LEN(new_value));
67+
68+
*field = zend_strndup(ZSTR_VAL(new_value), ZSTR_LEN(new_value));
6769
}
6870

6971
return SUCCESS;
7072
}
73+
/* }}} */
74+
75+
static ZEND_INI_MH(v8js_OnUpdateV8Flags) /* {{{ */
76+
{
77+
return v8js_ini_string(&v8js_process_globals.v8_flags, new_value);
78+
}
79+
/* }}} */
80+
81+
static ZEND_INI_MH(v8js_OnUpdateIcudatPath) /* {{{ */
82+
{
83+
return v8js_ini_string(&v8js_process_globals.icudtl_dat_path, new_value);
84+
}
85+
/* }}} */
7186

7287
static bool v8js_ini_to_bool(const zend_string *new_value) /* {{{ */
7388
{
@@ -106,6 +121,7 @@ static ZEND_INI_MH(v8js_OnUpdateCompatExceptions) /* {{{ */
106121

107122
ZEND_INI_BEGIN() /* {{{ */
108123
ZEND_INI_ENTRY("v8js.flags", NULL, ZEND_INI_ALL, v8js_OnUpdateV8Flags)
124+
ZEND_INI_ENTRY("v8js.icudtl_dat_path", NULL, ZEND_INI_ALL, v8js_OnUpdateIcudatPath)
109125
ZEND_INI_ENTRY("v8js.use_date", "0", ZEND_INI_ALL, v8js_OnUpdateUseDate)
110126
ZEND_INI_ENTRY("v8js.use_array_access", "0", ZEND_INI_ALL, v8js_OnUpdateUseArrayAccess)
111127
ZEND_INI_ENTRY("v8js.compat_php_exceptions", "0", ZEND_INI_ALL, v8js_OnUpdateCompatExceptions)

v8js_v8.cc

+10-3
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,17 @@ void v8js_v8_init() /* {{{ */
7676
}
7777
}
7878

79-
#if defined(PHP_V8_EXEC_PATH) && PHP_V8_API_VERSION >= 5003178
80-
/* Initialize ICU, call introduced in V8 5.3.178 */
81-
v8::V8::InitializeICUDefaultLocation(PHP_V8_EXEC_PATH, nullptr);
79+
#if PHP_V8_API_VERSION >= 5003178
80+
/* Initialize ICU, call introduced in V8 5.3.178 */
81+
if (v8js_process_globals.icudtl_dat_path != NULL && v8js_process_globals.icudtl_dat_path[0] != 0) {
82+
v8::V8::InitializeICUDefaultLocation(nullptr, v8js_process_globals.icudtl_dat_path);
83+
}
84+
#ifdef PHP_V8_EXEC_PATH
85+
else {
86+
v8::V8::InitializeICUDefaultLocation(PHP_V8_EXEC_PATH, nullptr);
87+
}
8288
#endif
89+
#endif /* PHP_V8_API_VERSION >= 5003178 */
8390

8491
/* Initialize V8 */
8592
v8::V8::Initialize();

0 commit comments

Comments
 (0)