From: Bruno Haible Date: Wed, 7 Jun 2023 15:22:03 +0000 (+0200) Subject: xgettext: In language Vala, fix a format string handling bug. X-Git-Tag: v0.22~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=735f771f15774e0d68b4ccc53994b0245d2005bb;p=thirdparty%2Fgettext.git xgettext: In language Vala, fix a format string handling bug. * gettext-tools/src/xgettext.c (xgettext_record_flag): Store format_c related flags also in flag_table_vala. * gettext-tools/tests/xgettext-vala-5: New file. * gettext-tools/tests/Makefile.am (TESTS): Add it. --- diff --git a/gettext-tools/src/xgettext.c b/gettext-tools/src/xgettext.c index d891bb00e..968aaf457 100644 --- a/gettext-tools/src/xgettext.c +++ b/gettext-tools/src/xgettext.c @@ -1481,6 +1481,16 @@ xgettext_record_flag (const char *optionstring) if (strlen (format_language[type]) == n && memcmp (format_language[type], p, n) == 0) { + /* This dispatch does the reverse mapping of all the SCANNERS_* + macros defined in the x-*.h files. For example, + SCANNERS_JAVA contains an entry + { ..., + &flag_table_java, + &formatstring_java, &formatstring_java_printf + } + Therefore here, we have to associate + format_java with flag_table_java at index 0, + format_java_printf with flag_table_java at index 1. */ switch (type) { case format_c: @@ -1499,6 +1509,9 @@ xgettext_record_flag (const char *optionstring) flag_context_list_table_insert (&flag_table_objc, 0, name_start, name_end, argnum, value, pass); + flag_context_list_table_insert (&flag_table_vala, 0, + name_start, name_end, + argnum, value, pass); break; case format_objc: flag_context_list_table_insert (&flag_table_objc, 1, diff --git a/gettext-tools/tests/Makefile.am b/gettext-tools/tests/Makefile.am index 4670cad9d..108e66186 100644 --- a/gettext-tools/tests/Makefile.am +++ b/gettext-tools/tests/Makefile.am @@ -161,6 +161,7 @@ TESTS = gettext-1 gettext-2 \ xgettext-tcl-stackovfl-1 xgettext-tcl-stackovfl-2 \ xgettext-tcl-stackovfl-3 xgettext-tcl-stackovfl-4 \ xgettext-vala-1 xgettext-vala-2 xgettext-vala-3 xgettext-vala-4 \ + xgettext-vala-5 \ xgettext-vala-stackovfl-1 xgettext-vala-stackovfl-2 \ xgettext-ycp-1 xgettext-ycp-2 xgettext-ycp-3 xgettext-ycp-4 \ xgettext-ycp-stackovfl-1 xgettext-ycp-stackovfl-2 \ diff --git a/gettext-tools/tests/xgettext-vala-5 b/gettext-tools/tests/xgettext-vala-5 new file mode 100755 index 000000000..44d4be33e --- /dev/null +++ b/gettext-tools/tests/xgettext-vala-5 @@ -0,0 +1,30 @@ +#! /bin/sh +. "${srcdir=.}/init.sh"; path_prepend_ . ../src + +# Test Vala support: pass-c-format. + +: ${XGETTEXT=xgettext} + +cat <<\EOF > xg-vala-5.vala +printf (_("blablaQ %d and %s"), a, b); +printf (_("blablaQ {0} and {1}"), a, b); +EOF + +${XGETTEXT} --omit-header --no-location -o xg-vala-5.tmp xg-vala-5.vala || Exit 1 +func_filter_POT_Creation_Date xg-vala-5.tmp xg-vala-5.po + +cat <<\EOF > xg-vala-5.ok +#, c-format +msgid "blablaQ %d and %s" +msgstr "" + +#, c-format +msgid "blablaQ {0} and {1}" +msgstr "" +EOF + +: ${DIFF=diff} +${DIFF} xg-vala-5.ok xg-vala-5.po +result=$? + +exit $result