Skip to content

Commit a6d6b5c

Browse files
committed
ext/gettext: update arguments handling.
using zend_string whenever relevant too.
1 parent 956c3c2 commit a6d6b5c

File tree

1 file changed

+78
-55
lines changed

1 file changed

+78
-55
lines changed

ext/gettext/gettext.c

Lines changed: 78 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,13 @@ PHP_MINFO_FUNCTION(php_gettext)
8181
/* {{{ Set the textdomain to "domain". Returns the current domain */
8282
PHP_FUNCTION(textdomain)
8383
{
84-
char *domain_name = NULL, *retval;
84+
char *retval = NULL, *domain_name = NULL;
8585
zend_string *domain = NULL;
8686

87-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "S!", &domain) == FAILURE) {
88-
RETURN_THROWS();
89-
}
87+
ZEND_PARSE_PARAMETERS_START(0, 1)
88+
Z_PARAM_OPTIONAL
89+
Z_PARAM_STR_OR_NULL(domain)
90+
ZEND_PARSE_PARAMETERS_END();
9091

9192
if (domain != NULL) {
9293
PHP_GETTEXT_DOMAIN_LENGTH_CHECK(1, ZSTR_LEN(domain))
@@ -105,7 +106,7 @@ PHP_FUNCTION(textdomain)
105106
/* {{{ Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist */
106107
PHP_FUNCTION(gettext)
107108
{
108-
char *msgstr;
109+
char *msgstr = NULL;
109110
zend_string *msgid;
110111

111112
ZEND_PARSE_PARAMETERS_START(1, 1)
@@ -126,12 +127,13 @@ PHP_FUNCTION(gettext)
126127
/* {{{ Return the translation of msgid for domain_name, or msgid unaltered if a translation does not exist */
127128
PHP_FUNCTION(dgettext)
128129
{
129-
char *msgstr;
130+
char *msgstr = NULL;
130131
zend_string *domain, *msgid;
131132

132-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "SS", &domain, &msgid) == FAILURE) {
133-
RETURN_THROWS();
134-
}
133+
ZEND_PARSE_PARAMETERS_START(2, 2)
134+
Z_PARAM_STR(domain)
135+
Z_PARAM_STR(msgid)
136+
ZEND_PARSE_PARAMETERS_END();
135137

136138
PHP_GETTEXT_DOMAIN_LENGTH_CHECK(1, ZSTR_LEN(domain))
137139
PHP_GETTEXT_LENGTH_CHECK(2, ZSTR_LEN(msgid))
@@ -149,13 +151,15 @@ PHP_FUNCTION(dgettext)
149151
/* {{{ Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist */
150152
PHP_FUNCTION(dcgettext)
151153
{
152-
char *msgstr;
154+
char *msgstr = NULL;
153155
zend_string *domain, *msgid;
154156
zend_long category;
155157

156-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "SSl", &domain, &msgid, &category) == FAILURE) {
157-
RETURN_THROWS();
158-
}
158+
ZEND_PARSE_PARAMETERS_START(3, 3)
159+
Z_PARAM_STR(domain)
160+
Z_PARAM_STR(msgid)
161+
Z_PARAM_LONG(category)
162+
ZEND_PARSE_PARAMETERS_END();
159163

160164
PHP_GETTEXT_DOMAIN_LENGTH_CHECK(1, ZSTR_LEN(domain))
161165
PHP_GETTEXT_LENGTH_CHECK(2, ZSTR_LEN(msgid))
@@ -174,19 +178,24 @@ PHP_FUNCTION(dcgettext)
174178
/* {{{ Bind to the text domain domain_name, looking for translations in dir. Returns the current domain */
175179
PHP_FUNCTION(bindtextdomain)
176180
{
177-
char *domain;
178-
size_t domain_len;
179-
zend_string *dir = NULL;
181+
zend_string *domain, *dir = NULL;
180182
char *retval, dir_name[MAXPATHLEN];
181183

182-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "sS!", &domain, &domain_len, &dir) == FAILURE) {
184+
ZEND_PARSE_PARAMETERS_START(1, 2)
185+
Z_PARAM_STR(domain)
186+
Z_PARAM_OPTIONAL
187+
Z_PARAM_STR_OR_NULL(dir)
188+
ZEND_PARSE_PARAMETERS_END();
189+
190+
PHP_GETTEXT_DOMAIN_LENGTH_CHECK(1, ZSTR_LEN(domain))
191+
192+
if (!ZSTR_LEN(domain)) {
193+
zend_argument_value_error(1, "cannot be empty");
183194
RETURN_THROWS();
184195
}
185196

186-
PHP_GETTEXT_DOMAIN_LENGTH_CHECK(1, domain_len)
187-
188197
if (dir == NULL) {
189-
RETURN_STRING(bindtextdomain(domain, NULL));
198+
RETURN_STRING(bindtextdomain(ZSTR_VAL(domain), NULL));
190199
}
191200

192201
if (ZSTR_LEN(dir) != 0 && !zend_string_equals_literal(dir, "0")) {
@@ -197,7 +206,7 @@ PHP_FUNCTION(bindtextdomain)
197206
RETURN_FALSE;
198207
}
199208

200-
retval = bindtextdomain(domain, dir_name);
209+
retval = bindtextdomain(ZSTR_VAL(domain), dir_name);
201210

202211
RETURN_STRING(retval);
203212
}
@@ -207,18 +216,20 @@ PHP_FUNCTION(bindtextdomain)
207216
/* {{{ Plural version of gettext() */
208217
PHP_FUNCTION(ngettext)
209218
{
210-
char *msgid1, *msgid2, *msgstr;
211-
size_t msgid1_len, msgid2_len;
219+
char *msgstr = NULL;
220+
zend_string *msgid1, *msgid2;
212221
zend_long count;
213222

214-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ssl", &msgid1, &msgid1_len, &msgid2, &msgid2_len, &count) == FAILURE) {
215-
RETURN_THROWS();
216-
}
223+
ZEND_PARSE_PARAMETERS_START(3, 3)
224+
Z_PARAM_STR(msgid1)
225+
Z_PARAM_STR(msgid2)
226+
Z_PARAM_LONG(count)
227+
ZEND_PARSE_PARAMETERS_END();
217228

218-
PHP_GETTEXT_LENGTH_CHECK(1, msgid1_len)
219-
PHP_GETTEXT_LENGTH_CHECK(2, msgid2_len)
229+
PHP_GETTEXT_LENGTH_CHECK(1, ZSTR_LEN(msgid1))
230+
PHP_GETTEXT_LENGTH_CHECK(2, ZSTR_LEN(msgid2))
220231

221-
msgstr = ngettext(msgid1, msgid2, count);
232+
msgstr = ngettext(ZSTR_VAL(msgid1), ZSTR_VAL(msgid2), count);
222233

223234
ZEND_ASSERT(msgstr);
224235
RETURN_STRING(msgstr);
@@ -230,20 +241,22 @@ PHP_FUNCTION(ngettext)
230241
/* {{{ Plural version of dgettext() */
231242
PHP_FUNCTION(dngettext)
232243
{
233-
char *domain, *msgid1, *msgid2, *msgstr = NULL;
234-
size_t domain_len, msgid1_len, msgid2_len;
244+
char *msgstr = NULL;
245+
zend_string *domain, *msgid1, *msgid2;
235246
zend_long count;
236247

237-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "sssl", &domain, &domain_len,
238-
&msgid1, &msgid1_len, &msgid2, &msgid2_len, &count) == FAILURE) {
239-
RETURN_THROWS();
240-
}
248+
ZEND_PARSE_PARAMETERS_START(4, 4)
249+
Z_PARAM_STR(domain)
250+
Z_PARAM_STR(msgid1)
251+
Z_PARAM_STR(msgid2)
252+
Z_PARAM_LONG(count)
253+
ZEND_PARSE_PARAMETERS_END();
241254

242-
PHP_GETTEXT_DOMAIN_LENGTH_CHECK(1, domain_len)
243-
PHP_GETTEXT_LENGTH_CHECK(2, msgid1_len)
244-
PHP_GETTEXT_LENGTH_CHECK(3, msgid2_len)
255+
PHP_GETTEXT_DOMAIN_LENGTH_CHECK(1, ZSTR_LEN(domain))
256+
PHP_GETTEXT_LENGTH_CHECK(2, ZSTR_LEN(msgid1))
257+
PHP_GETTEXT_LENGTH_CHECK(3, ZSTR_LEN(msgid2))
245258

246-
msgstr = dngettext(domain, msgid1, msgid2, count);
259+
msgstr = dngettext(ZSTR_VAL(domain), ZSTR_VAL(msgid1), ZSTR_VAL(msgid2), count);
247260

248261
ZEND_ASSERT(msgstr);
249262
RETURN_STRING(msgstr);
@@ -255,23 +268,26 @@ PHP_FUNCTION(dngettext)
255268
/* {{{ Plural version of dcgettext() */
256269
PHP_FUNCTION(dcngettext)
257270
{
258-
char *domain, *msgid1, *msgid2, *msgstr = NULL;
259-
size_t domain_len, msgid1_len, msgid2_len;
271+
char *msgstr = NULL;
272+
zend_string *domain, *msgid1, *msgid2;
260273
zend_long count, category;
261274

262275
RETVAL_FALSE;
263276

264-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "sssll", &domain, &domain_len,
265-
&msgid1, &msgid1_len, &msgid2, &msgid2_len, &count, &category) == FAILURE) {
266-
RETURN_THROWS();
267-
}
277+
ZEND_PARSE_PARAMETERS_START(5, 5)
278+
Z_PARAM_STR(domain)
279+
Z_PARAM_STR(msgid1)
280+
Z_PARAM_STR(msgid2)
281+
Z_PARAM_LONG(count)
282+
Z_PARAM_LONG(category)
283+
ZEND_PARSE_PARAMETERS_END();
268284

269-
PHP_GETTEXT_DOMAIN_LENGTH_CHECK(1, domain_len)
270-
PHP_GETTEXT_LENGTH_CHECK(2, msgid1_len)
271-
PHP_GETTEXT_LENGTH_CHECK(3, msgid2_len)
285+
PHP_GETTEXT_DOMAIN_LENGTH_CHECK(1, ZSTR_LEN(domain))
286+
PHP_GETTEXT_LENGTH_CHECK(2, ZSTR_LEN(msgid1))
287+
PHP_GETTEXT_LENGTH_CHECK(3, ZSTR_LEN(msgid2))
272288
PHP_DCGETTEXT_CATEGORY_CHECK(5, category)
273289

274-
msgstr = dcngettext(domain, msgid1, msgid2, count, category);
290+
msgstr = dcngettext(ZSTR_VAL(domain), ZSTR_VAL(msgid1), ZSTR_VAL(msgid2), count, category);
275291

276292
ZEND_ASSERT(msgstr);
277293
RETURN_STRING(msgstr);
@@ -284,16 +300,23 @@ PHP_FUNCTION(dcngettext)
284300
/* {{{ Specify the character encoding in which the messages from the DOMAIN message catalog will be returned. */
285301
PHP_FUNCTION(bind_textdomain_codeset)
286302
{
287-
char *domain, *codeset = NULL, *retval = NULL;
288-
size_t domain_len, codeset_len;
303+
char *retval = NULL;
304+
zend_string *domain, *codeset = NULL;
305+
306+
ZEND_PARSE_PARAMETERS_START(1, 2)
307+
Z_PARAM_STR(domain)
308+
Z_PARAM_OPTIONAL
309+
Z_PARAM_STR_OR_NULL(codeset)
310+
ZEND_PARSE_PARAMETERS_END();
311+
312+
PHP_GETTEXT_DOMAIN_LENGTH_CHECK(1, ZSTR_LEN(domain))
289313

290-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss!", &domain, &domain_len, &codeset, &codeset_len) == FAILURE) {
314+
if (!ZSTR_LEN(domain)) {
315+
zend_argument_value_error(1, "cannot be empty");
291316
RETURN_THROWS();
292317
}
293318

294-
PHP_GETTEXT_DOMAIN_LENGTH_CHECK(1, domain_len)
295-
296-
retval = bind_textdomain_codeset(domain, codeset);
319+
retval = bind_textdomain_codeset(ZSTR_VAL(domain), codeset ? ZSTR_VAL(codeset) : NULL);
297320

298321
if (!retval) {
299322
RETURN_FALSE;

0 commit comments

Comments
 (0)