static const mbfl_encoding *php_mb_get_encoding(const char *encoding_name) {
if (encoding_name) {
- const mbfl_encoding *encoding = mbfl_name2encoding(encoding_name);
+ const mbfl_encoding *encoding;
+ if (MBSTRG(last_used_encoding_name)
+ && !strcasecmp(encoding_name, MBSTRG(last_used_encoding_name))) {
+ return MBSTRG(last_used_encoding);
+ }
+
+ encoding = mbfl_name2encoding(encoding_name);
if (!encoding) {
php_error_docref(NULL, E_WARNING, "Unknown encoding \"%s\"", encoding_name);
return NULL;
}
+
+ if (MBSTRG(last_used_encoding_name)) {
+ efree(MBSTRG(last_used_encoding_name));
+ }
+ MBSTRG(last_used_encoding_name) = estrdup(encoding_name);
+ MBSTRG(last_used_encoding) = encoding;
return encoding;
} else {
return MBSTRG(current_internal_encoding);
#if HAVE_MBREGEX
mbstring_globals->mb_regex_globals = php_mb_regex_globals_alloc();
#endif
+ mbstring_globals->last_used_encoding_name = NULL;
+ mbstring_globals->last_used_encoding = NULL;
}
/* }}} */
#if HAVE_MBREGEX
php_mb_regex_globals_free(mbstring_globals->mb_regex_globals);
#endif
+ if (mbstring_globals->last_used_encoding_name) {
+ efree(mbstring_globals->last_used_encoding_name);
+ }
}
/* }}} */
#if HAVE_MBREGEX
struct _zend_mb_regex_globals *mb_regex_globals;
#endif
+ char *last_used_encoding_name;
+ const mbfl_encoding *last_used_encoding;
ZEND_END_MODULE_GLOBALS(mbstring)
#define MB_OVERLOAD_MAIL 1