#define PHP_GETTEXT_MAX_DOMAIN_LENGTH 1024
#define PHP_GETTEXT_MAX_MSGID_LENGTH 4096
-#define PHP_GETTEXT_DOMAIN_LENGTH_CHECK \
+#define PHP_GETTEXT_DOMAIN_LENGTH_CHECK(domain_len) \
if (UNEXPECTED(domain_len > PHP_GETTEXT_MAX_DOMAIN_LENGTH)) { \
php_error_docref(NULL, E_WARNING, "domain passed too long"); \
RETURN_FALSE; \
return;
}
- PHP_GETTEXT_DOMAIN_LENGTH_CHECK
+ PHP_GETTEXT_DOMAIN_LENGTH_CHECK(domain_len)
if (domain != NULL && strcmp(domain, "") && strcmp(domain, "0")) {
domain_name = domain;
PHP_GETTEXT_LENGTH_CHECK("msgid", ZSTR_LEN(msgid))
msgstr = gettext(ZSTR_VAL(msgid));
- RETURN_STRING(msgstr);
+ if (msgstr != ZSTR_VAL(msgid)) {
+ RETURN_STRING(msgstr);
+ } else {
+ RETURN_STR_COPY(msgid);
+ }
}
/* }}} */
Return the translation of msgid for domain_name, or msgid unaltered if a translation does not exist */
PHP_NAMED_FUNCTION(zif_dgettext)
{
- char *domain, *msgid, *msgstr;
- size_t domain_len, msgid_len;
+ char *msgstr;
+ zend_string *domain, *msgid;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss", &domain, &domain_len, &msgid, &msgid_len) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "SS", &domain, &msgid) == FAILURE) {
return;
}
- PHP_GETTEXT_DOMAIN_LENGTH_CHECK
- PHP_GETTEXT_LENGTH_CHECK("msgid", msgid_len)
+ PHP_GETTEXT_DOMAIN_LENGTH_CHECK(ZSTR_LEN(domain))
+ PHP_GETTEXT_LENGTH_CHECK("msgid", ZSTR_LEN(msgid))
- msgstr = dgettext(domain, msgid);
+ msgstr = dgettext(ZSTR_VAL(domain), ZSTR_VAL(msgid));
- RETURN_STRING(msgstr);
+ if (msgstr != ZSTR_VAL(msgid)) {
+ RETURN_STRING(msgstr);
+ } else {
+ RETURN_STR_COPY(msgid);
+ }
}
/* }}} */
Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist */
PHP_NAMED_FUNCTION(zif_dcgettext)
{
- char *domain, *msgid, *msgstr;
- size_t domain_len, msgid_len;
+ char *msgstr;
+ zend_string *domain, *msgid;
zend_long category;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "ssl", &domain, &domain_len, &msgid, &msgid_len, &category) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "SSl", &domain, &msgid, &category) == FAILURE) {
return;
}
- PHP_GETTEXT_DOMAIN_LENGTH_CHECK
- PHP_GETTEXT_LENGTH_CHECK("msgid", msgid_len)
+ PHP_GETTEXT_DOMAIN_LENGTH_CHECK(ZSTR_LEN(domain))
+ PHP_GETTEXT_LENGTH_CHECK("msgid", ZSTR_LEN(msgid))
- msgstr = dcgettext(domain, msgid, category);
+ msgstr = dcgettext(ZSTR_VAL(domain), ZSTR_VAL(msgid), category);
- RETURN_STRING(msgstr);
+ if (msgstr != ZSTR_VAL(msgid)) {
+ RETURN_STRING(msgstr);
+ } else {
+ RETURN_STR_COPY(msgid);
+ }
}
/* }}} */
return;
}
- PHP_GETTEXT_DOMAIN_LENGTH_CHECK
+ PHP_GETTEXT_DOMAIN_LENGTH_CHECK(domain_len)
if (domain[0] == '\0') {
php_error(E_WARNING, "The first parameter of bindtextdomain must not be empty");
PHP_GETTEXT_LENGTH_CHECK("msgid2", msgid2_len)
msgstr = ngettext(msgid1, msgid2, count);
- if (msgstr) {
- RETVAL_STRING(msgstr);
- }
+
+ ZEND_ASSERT(msgstr);
+ RETURN_STRING(msgstr);
}
/* }}} */
#endif
return;
}
- PHP_GETTEXT_DOMAIN_LENGTH_CHECK
+ PHP_GETTEXT_DOMAIN_LENGTH_CHECK(domain_len)
PHP_GETTEXT_LENGTH_CHECK("msgid1", msgid1_len)
PHP_GETTEXT_LENGTH_CHECK("msgid2", msgid2_len)
msgstr = dngettext(domain, msgid1, msgid2, count);
- if (msgstr) {
- RETVAL_STRING(msgstr);
- }
+
+ ZEND_ASSERT(msgstr);
+ RETURN_STRING(msgstr);
}
/* }}} */
#endif
return;
}
- PHP_GETTEXT_DOMAIN_LENGTH_CHECK
+ PHP_GETTEXT_DOMAIN_LENGTH_CHECK(domain_len)
PHP_GETTEXT_LENGTH_CHECK("msgid1", msgid1_len)
PHP_GETTEXT_LENGTH_CHECK("msgid2", msgid2_len)
msgstr = dcngettext(domain, msgid1, msgid2, count, category);
- if (msgstr) {
- RETVAL_STRING(msgstr);
- }
+ ZEND_ASSERT(msgstr);
+ RETURN_STRING(msgstr);
}
/* }}} */
#endif
return;
}
- PHP_GETTEXT_DOMAIN_LENGTH_CHECK
+ PHP_GETTEXT_DOMAIN_LENGTH_CHECK(domain_len)
retval = bind_textdomain_codeset(domain, codeset);