};
/* }}} */
+
+/* {{{ PHP_INI_MH
+ */
+static PHP_INI_MH(OnSetJsonPrecision)
+{
+ zend_long i;
+
+ ZEND_ATOL(i, ZSTR_VAL(new_value));
+ if (i >= -1) {
+ JSON_G(precision) = i;
+ return SUCCESS;
+ } else {
+ return FAILURE;
+ }
+}
+/* }}} */
+
+
+/* {{{ PHP_INI
+ */
+PHP_INI_BEGIN()
+STD_PHP_INI_ENTRY("json.precision", "-1", PHP_INI_ALL, OnSetJsonPrecision, precision, zend_json_globals, json_globals)
+PHP_INI_END()
+/* }}} */
+
/* Register constant for options and errors */
#define PHP_JSON_REGISTER_CONSTANT(_name, _value) \
REGISTER_LONG_CONSTANT(_name, _value, CONST_CS | CONST_PERSISTENT);
{
zend_class_entry ce;
+ REGISTER_INI_ENTRIES();
+
INIT_CLASS_ENTRY(ce, "JsonSerializable", json_serializable_interface);
php_json_serializable_ce = zend_register_internal_interface(&ce);
}
/* }}} */
+/* {{{ PHP_MSHUTDOWN_FUNCTION
+*/
+static PHP_MSHUTDOWN_FUNCTION(json)
+{
+ UNREGISTER_INI_ENTRIES();
+
+ return SUCCESS;
+}
+/* }}} */
+
/* {{{ json_module_entry
*/
"json",
json_functions,
PHP_MINIT(json),
- NULL,
+ PHP_MSHUTDOWN(json),
NULL,
NULL,
PHP_MINFO(json),
{
size_t len;
char num[PHP_JSON_DOUBLE_MAX_LENGTH];
- if (PG(serialize_precision) == -1) {
+ if (JSON_G(precision) == -1) {
php_0cvt(d, 17, '.', 'e', num);
} else {
- php_gcvt(d, PG(serialize_precision), '.', 'e', num);
+ php_gcvt(d, JSON_G(precision), '.', 'e', num);
}
len = strlen(num);
if (options & PHP_JSON_PRESERVE_ZERO_FRACTION && strchr(num, '.') == NULL && len < PHP_JSON_DOUBLE_MAX_LENGTH - 2) {