diff options
author | Christ van Willegen <cvwillegen@gmail.com> | 2024-07-11 21:36:21 +0200 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2024-07-11 21:36:21 +0200 |
commit | 8252ef134f5a57e8a07b66ce79068c262a6386d8 (patch) | |
tree | e728dbaafe1836691e2696a870070555a1d46046 | |
parent | 965091001fc131192f0bca49917ed6567cf8f060 (diff) |
patch 9.1.0560: bindtextdomain() does not indicate an errorv9.1.0560
Problem: bindtextdomain() does not indicate an error
(after v9.1.509)
Solution: return false on failure (OOM).
(Chris van Willegen)
closes: #15116
Signed-off-by: Christ van Willegen <cvwillegen@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
-rw-r--r-- | runtime/doc/builtin.txt | 7 | ||||
-rw-r--r-- | src/evalfunc.c | 15 | ||||
-rw-r--r-- | src/testdir/test_gettext.vim | 2 | ||||
-rw-r--r-- | src/testdir/test_gettext_cp1251.vim | 32 | ||||
-rw-r--r-- | src/testdir/test_gettext_utf8.vim | 32 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim.h | 2 |
7 files changed, 64 insertions, 28 deletions
diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt index f3baf2470a..96d774e7e9 100644 --- a/runtime/doc/builtin.txt +++ b/runtime/doc/builtin.txt @@ -68,7 +68,7 @@ balloon_gettext() String current text in the balloon balloon_show({expr}) none show {expr} inside the balloon balloon_split({msg}) List split {msg} as used for a balloon bindtextdomain({package}, {path}) - none bind text domain to specied path + Bool bind text domain to specified path blob2list({blob}) List convert {blob} into a list of numbers browse({save}, {title}, {initdir}, {default}) String put up a file requester @@ -1228,7 +1228,10 @@ bindtextdomain({package}, {path}) *bindtextdomain()* translations for a package. {path} is the directory name for the translations. See |package-translation|. - Return type: none + Returns v:true on success and v:false on failure (out of + memory). + + Return type: |vim9-boolean| blob2list({blob}) *blob2list()* Return a List containing the number value of each byte in Blob diff --git a/src/evalfunc.c b/src/evalfunc.c index 370b26bd89..7e3241037a 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -1827,7 +1827,7 @@ static funcentry_T global_functions[] = #endif }, {"bindtextdomain", 2, 2, 0, arg2_string, - ret_void, f_bindtextdomain}, + ret_bool, f_bindtextdomain}, {"blob2list", 1, 1, FEARG_1, arg1_blob, ret_list_number, f_blob2list}, {"browse", 4, 4, 0, arg4_browse, @@ -3486,8 +3486,11 @@ get_buf_arg(typval_T *arg) * "bindtextdomain(package, path)" function */ static void -f_bindtextdomain(typval_T *argvars UNUSED, typval_T *rettv UNUSED) +f_bindtextdomain(typval_T *argvars, typval_T *rettv) { + rettv->v_type = VAR_BOOL; + rettv->vval.v_number = VVAL_TRUE; + if (check_for_nonempty_string_arg(argvars, 0) == FAIL || check_for_nonempty_string_arg(argvars, 1) == FAIL) return; @@ -3495,7 +3498,13 @@ f_bindtextdomain(typval_T *argvars UNUSED, typval_T *rettv UNUSED) if (strcmp((const char *)argvars[0].vval.v_string, VIMPACKAGE) == 0) semsg(_(e_invalid_argument_str), tv_get_string(&argvars[0])); else - bindtextdomain((const char *)argvars[0].vval.v_string, (const char *)argvars[1].vval.v_string); + { + if (bindtextdomain((const char *)argvars[0].vval.v_string, (const char *)argvars[1].vval.v_string) == NULL) + { + do_outofmem_msg((long)0); + rettv->vval.v_number = VVAL_FALSE; + } + } return; } diff --git a/src/testdir/test_gettext.vim b/src/testdir/test_gettext.vim index 6a5aafdfe2..a990121a8e 100644 --- a/src/testdir/test_gettext.vim +++ b/src/testdir/test_gettext.vim @@ -1,5 +1,7 @@ source check.vim +CheckFeature gettext + " Test for gettext() func Test_gettext() call assert_fails('call bindtextdomain("test")', 'E119:') diff --git a/src/testdir/test_gettext_cp1251.vim b/src/testdir/test_gettext_cp1251.vim index c91f7848af..69d2bbf4cd 100644 --- a/src/testdir/test_gettext_cp1251.vim +++ b/src/testdir/test_gettext_cp1251.vim @@ -2,22 +2,32 @@ source check.vim " This fail on CI MacOS 14 because bindtextdomain() is not available there " (missing library?) CheckNotMac +CheckFeature gettext " Test for gettext() func Test_gettext() set encoding=cp1251 - call bindtextdomain("__PACKAGE__", getcwd()) - try - language messages ru_RU - call assert_equal(': ', gettext("ERROR: ", "__PACKAGE__")) - catch /^Vim\%((\a\+)\)\=:E197:/ - throw "Skipped: not possible to set locale to ru (missing?)" - endtry + call assert_equal('ERROR: ', gettext("ERROR: ", "__PACKAGE__")) + try - language messages en_GB.UTF-8 - call assert_equal('ERROR: ', gettext("ERROR: ", "__PACKAGE__")) - catch /^Vim\%((\a\+)\)\=:E197:/ - throw "Skipped: not possible to set locale to en (missing?)" + call assert_true(bindtextdomain("__PACKAGE__", getcwd())) + + try + language messages ru_RU + call assert_equal(': ', gettext("ERROR: ", "__PACKAGE__")) + catch /^Vim\%((\a\+)\)\=:E197:/ + throw "Skipped: not possible to set locale to ru (missing?)" + endtry + + try + language messages en_GB.UTF-8 + call assert_equal('ERROR: ', gettext("ERROR: ", "__PACKAGE__")) + catch /^Vim\%((\a\+)\)\=:E197:/ + throw "Skipped: not possible to set locale to en (missing?)" + endtry + + catch /^Vim\%((\a\+)\)\=:E342:/ + throw "Skipped: out of memory executing bindtextdomain()" endtry set encoding& endfunc diff --git a/src/testdir/test_gettext_utf8.vim b/src/testdir/test_gettext_utf8.vim index 7862e39e04..b96f8ea8ed 100644 --- a/src/testdir/test_gettext_utf8.vim +++ b/src/testdir/test_gettext_utf8.vim @@ -2,22 +2,32 @@ source check.vim " This fail on CI MacOS 14 because bindtextdomain() is not available there " (missing library?) CheckNotMac +CheckFeature gettext " Test for gettext() func Test_gettext() set encoding=utf-8 - call bindtextdomain("__PACKAGE__", getcwd()) - try - language messages ru_RU - call assert_equal('ОШИБКА: ', gettext("ERROR: ", "__PACKAGE__")) - catch /^Vim\%((\a\+)\)\=:E197:/ - throw "Skipped: not possible to set locale to ru (missing?)" - endtry + call assert_equal('ERROR: ', gettext("ERROR: ", "__PACKAGE__")) + try - language messages en_GB.UTF-8 - call assert_equal('ERROR: ', gettext("ERROR: ", "__PACKAGE__")) - catch /^Vim\%((\a\+)\)\=:E197:/ - throw "Skipped: not possible to set locale to en (missing?)" + call assert_true(bindtextdomain("__PACKAGE__", getcwd())) + + try + language messages ru_RU + call assert_equal('ОШИБКА: ', gettext("ERROR: ", "__PACKAGE__")) + catch /^Vim\%((\a\+)\)\=:E197:/ + throw "Skipped: not possible to set locale to ru (missing?)" + endtry + + try + language messages en_GB.UTF-8 + call assert_equal('ERROR: ', gettext("ERROR: ", "__PACKAGE__")) + catch /^Vim\%((\a\+)\)\=:E197:/ + throw "Skipped: not possible to set locale to en (missing?)" + endtry + + catch /^Vim\%((\a\+)\)\=:E342:/ + throw "Skipped: out of memory executing bindtextdomain()" endtry set encoding& endfunc diff --git a/src/version.c b/src/version.c index cc2713aa0f..ddb02d1eed 100644 --- a/src/version.c +++ b/src/version.c @@ -705,6 +705,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 560, +/**/ 559, /**/ 558, @@ -598,7 +598,7 @@ extern int (*dyn_libintl_wputenv)(const wchar_t *envstring); # ifdef bindtextdomain # undef bindtextdomain # endif -# define bindtextdomain(x, y) // empty +# define bindtextdomain(x, y) "" # ifdef bind_textdomain_codeset # undef bind_textdomain_codeset # endif |