From: Bruno Haible Date: Sat, 11 Nov 2023 15:48:09 +0000 (+0100) Subject: libgettextpo: Remove static variables curr_mp, curr_msgid_pos. X-Git-Tag: v0.23~312 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=da5a62248def5aa0eedb04481fbbb92cb524d06c;p=thirdparty%2Fgettext.git libgettextpo: Remove static variables curr_mp, curr_msgid_pos. * gettext-tools/src/format.h (formatstring_error_logger_t): Add a 'data' parameter. (struct formatstring_parser): In the 'check' method, add an 'error_logger_data' parameter. (check_msgid_msgstr_format_i, check_msgid_msgstr_format): Add an 'error_logger_data' parameter. * gettext-tools/src/format-awk.c (format_check): Add an 'error_logger_data' parameter. Pass it to each error_logger invocation. * gettext-tools/src/format-boost.c (format_check): Likewise. * gettext-tools/src/format-c.c (format_check): Likewise. * gettext-tools/src/format-c++-brace.c (format_check): Likewise. * gettext-tools/src/format-csharp.c (format_check): Likewise. * gettext-tools/src/format-elisp.c (format_check): Likewise. * gettext-tools/src/format-gcc-internal.c (format_check): Likewise. * gettext-tools/src/format-gfc-internal.c (format_check): Likewise. * gettext-tools/src/format-java-printf.c (format_check): Likewise. * gettext-tools/src/format-java.c (format_check): Likewise. * gettext-tools/src/format-javascript.c (format_check): Likewise. * gettext-tools/src/format-kde-kuit.c (format_check): Likewise. * gettext-tools/src/format-kde.c (format_check): Likewise. * gettext-tools/src/format-librep.c (format_check): Likewise. * gettext-tools/src/format-lisp.c (format_check): Likewise. * gettext-tools/src/format-lua.c (format_check): Likewise. * gettext-tools/src/format-pascal.c (format_check): Likewise. * gettext-tools/src/format-perl-brace.c (format_check): Likewise. * gettext-tools/src/format-perl.c (format_check): Likewise. * gettext-tools/src/format-php.c (format_check): Likewise. * gettext-tools/src/format-python-brace.c (format_check): Likewise. * gettext-tools/src/format-python.c (format_check): Likewise. * gettext-tools/src/format-qt-plural.c (format_check): Likewise. * gettext-tools/src/format-qt.c (format_check): Likewise. * gettext-tools/src/format-ruby.c (format_check): Likewise. * gettext-tools/src/format-scheme.c (format_check): Likewise. * gettext-tools/src/format-sh.c (format_check): Likewise. * gettext-tools/src/format-smalltalk.c (format_check): Likewise. * gettext-tools/src/format-tcl.c (format_check): Likewise. * gettext-tools/src/format.c (check_msgid_msgstr_format_i, check_msgid_msgstr_format): Add an 'error_logger_data' parameter. * gettext-tools/src/msgl-check.c (curr_mp, curr_msgid_pos): Remove variables. (struct formatstring_error_logger_locals): New type. (formatstring_error_logger): Add a 'data' parameter. (check_pair): Set up a 'struct formatstring_error_logger_locals' on the stack and pass it to check_msgid_msgstr_format. * gettext-tools/src/msgmerge.c (silent_error_logger): Add a 'data' parameter. (message_merge): Pass a null error_logger_data. * gettext-tools/libgettextpo/gettext-po.c (po_error_logger): Add a 'data' parameter. (po_message_check_format): Pass a null error_logger_data. --- diff --git a/gettext-tools/libgettextpo/gettext-po.c b/gettext-tools/libgettextpo/gettext-po.c index 6f0b001c3..343f03bac 100644 --- a/gettext-tools/libgettextpo/gettext-po.c +++ b/gettext-tools/libgettextpo/gettext-po.c @@ -1327,10 +1327,10 @@ po_message_check_format (po_message_t message, po_xerror_handler_t handler) /* An error logger based on the po_error function pointer. */ static void -po_error_logger (const char *format, ...) - __attribute__ ((__format__ (__printf__, 1, 2))); +po_error_logger (void *data, const char *format, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); static void -po_error_logger (const char *format, ...) +po_error_logger (void *data, const char *format, ...) { va_list args; char *error_message; @@ -1359,7 +1359,8 @@ po_message_check_format (po_message_t message, po_error_handler_t handler) check_msgid_msgstr_format (mp->msgid, mp->msgid_plural, mp->msgstr, mp->msgstr_len, - mp->is_format, mp->range, NULL, po_error_logger); + mp->is_format, mp->range, NULL, + po_error_logger, NULL); /* Restore error handler. */ po_error = orig_error; diff --git a/gettext-tools/src/format-awk.c b/gettext-tools/src/format-awk.c index bcf43540b..57b5bcb35 100644 --- a/gettext-tools/src/format-awk.c +++ b/gettext-tools/src/format-awk.c @@ -481,7 +481,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -507,7 +507,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (cmp > 0) { if (error_logger) - error_logger (_("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), spec2->numbered[j].number, pretty_msgstr, pretty_msgid); err = true; @@ -518,7 +519,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (equality) { if (error_logger) - error_logger (_("a format specification for argument %u doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u doesn't exist in '%s'"), spec1->numbered[i].number, pretty_msgstr); err = true; break; @@ -538,7 +540,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (spec1->numbered[i].type != spec2->numbered[j].type) { if (error_logger) - error_logger (_("format specifications in '%s' and '%s' for argument %u are not the same"), + error_logger (error_logger_data, + _("format specifications in '%s' and '%s' for argument %u are not the same"), pretty_msgid, pretty_msgstr, spec2->numbered[j].number); err = true; diff --git a/gettext-tools/src/format-boost.c b/gettext-tools/src/format-boost.c index 71680239d..c191ff1b3 100644 --- a/gettext-tools/src/format-boost.c +++ b/gettext-tools/src/format-boost.c @@ -590,7 +590,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -616,7 +616,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (cmp > 0) { if (error_logger) - error_logger (_("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), spec2->numbered[j].number, pretty_msgstr, pretty_msgid); err = true; @@ -627,7 +628,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (equality) { if (error_logger) - error_logger (_("a format specification for argument %u doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u doesn't exist in '%s'"), spec1->numbered[i].number, pretty_msgstr); err = true; break; @@ -647,7 +649,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (spec1->numbered[i].type != spec2->numbered[j].type) { if (error_logger) - error_logger (_("format specifications in '%s' and '%s' for argument %u are not the same"), + error_logger (error_logger_data, + _("format specifications in '%s' and '%s' for argument %u are not the same"), pretty_msgid, pretty_msgstr, spec2->numbered[j].number); err = true; diff --git a/gettext-tools/src/format-c++-brace.c b/gettext-tools/src/format-c++-brace.c index 8082e6c9d..05ae444ca 100644 --- a/gettext-tools/src/format-c++-brace.c +++ b/gettext-tools/src/format-c++-brace.c @@ -926,7 +926,7 @@ get_type_description (char buf[MAX_TYPE_DESCRIPTION_LEN], unsigned int type) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -952,7 +952,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (cmp > 0) { if (error_logger) - error_logger (_("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), spec2->numbered[j].number, pretty_msgstr, pretty_msgid); err = true; @@ -963,7 +964,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (equality) { if (error_logger) - error_logger (_("a format specification for argument %u doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u doesn't exist in '%s'"), spec1->numbered[i].number, pretty_msgstr); err = true; break; @@ -988,7 +990,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, { char buf[MAX_TYPE_DESCRIPTION_LEN]; get_type_description (buf, type_difference); - error_logger (_("The format specification for argument %u in '%s' is applicable to the types %s, but the format specification for argument %u in '%s' is not."), + error_logger (error_logger_data, + _("The format specification for argument %u in '%s' is applicable to the types %s, but the format specification for argument %u in '%s' is not."), spec1->numbered[i].number, pretty_msgid, buf, spec2->numbered[j].number, pretty_msgstr); } @@ -1000,7 +1003,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (presentation_difference != 0) { if (error_logger) - error_logger (_("The format specification for argument %u in '%s' uses a different presentation than the format specification for argument %u in '%s'."), + error_logger (error_logger_data, + _("The format specification for argument %u in '%s' uses a different presentation than the format specification for argument %u in '%s'."), spec2->numbered[j].number, pretty_msgstr, spec1->numbered[i].number, pretty_msgid); err = true; diff --git a/gettext-tools/src/format-c.c b/gettext-tools/src/format-c.c index aabddf089..b30e1c6f0 100644 --- a/gettext-tools/src/format-c.c +++ b/gettext-tools/src/format-c.c @@ -123,7 +123,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -137,7 +137,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, : spec1->unnumbered_arg_count < spec2->unnumbered_arg_count) { if (error_logger) - error_logger (_("number of format specifications in '%s' and '%s' does not match"), + error_logger (error_logger_data, + _("number of format specifications in '%s' and '%s' does not match"), pretty_msgid, pretty_msgstr); err = true; } @@ -146,7 +147,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (spec1->unnumbered[i].type != spec2->unnumbered[i].type) { if (error_logger) - error_logger (_("format specifications in '%s' and '%s' for argument %u are not the same"), + error_logger (error_logger_data, + _("format specifications in '%s' and '%s' for argument %u are not the same"), pretty_msgid, pretty_msgstr, i + 1); err = true; } diff --git a/gettext-tools/src/format-csharp.c b/gettext-tools/src/format-csharp.c index 049a1fcaf..225418524 100644 --- a/gettext-tools/src/format-csharp.c +++ b/gettext-tools/src/format-csharp.c @@ -1,5 +1,5 @@ /* C# format strings. - Copyright (C) 2003-2004, 2006-2007, 2009, 2018-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2023 Free Software Foundation, Inc. Written by Bruno Haible , 2003. This program is free software: you can redistribute it and/or modify @@ -187,7 +187,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -200,7 +200,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, : spec1->numbered_arg_count < spec2->numbered_arg_count) { if (error_logger) - error_logger (_("number of format specifications in '%s' and '%s' does not match"), + error_logger (error_logger_data, + _("number of format specifications in '%s' and '%s' does not match"), pretty_msgid, pretty_msgstr); err = true; } diff --git a/gettext-tools/src/format-elisp.c b/gettext-tools/src/format-elisp.c index 01ea279df..d041cd3b3 100644 --- a/gettext-tools/src/format-elisp.c +++ b/gettext-tools/src/format-elisp.c @@ -1,5 +1,5 @@ /* Emacs Lisp format strings. - Copyright (C) 2001-2004, 2006-2007, 2009, 2019-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2023 Free Software Foundation, Inc. Written by Bruno Haible , 2002. This program is free software: you can redistribute it and/or modify @@ -319,7 +319,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -345,7 +345,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (cmp > 0) { if (error_logger) - error_logger (_("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), spec2->numbered[j].number, pretty_msgstr, pretty_msgid); err = true; @@ -356,7 +357,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (equality) { if (error_logger) - error_logger (_("a format specification for argument %u doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u doesn't exist in '%s'"), spec1->numbered[i].number, pretty_msgstr); err = true; break; @@ -376,7 +378,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (spec1->numbered[i].type != spec2->numbered[j].type) { if (error_logger) - error_logger (_("format specifications in '%s' and '%s' for argument %u are not the same"), + error_logger (error_logger_data, + _("format specifications in '%s' and '%s' for argument %u are not the same"), pretty_msgid, pretty_msgstr, spec2->numbered[j].number); err = true; diff --git a/gettext-tools/src/format-gcc-internal.c b/gettext-tools/src/format-gcc-internal.c index 9dbd99b13..ce5ea66dd 100644 --- a/gettext-tools/src/format-gcc-internal.c +++ b/gettext-tools/src/format-gcc-internal.c @@ -599,7 +599,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -625,7 +625,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (cmp > 0) { if (error_logger) - error_logger (_("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), spec2->numbered[j].number, pretty_msgstr, pretty_msgid); err = true; @@ -636,7 +637,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (equality) { if (error_logger) - error_logger (_("a format specification for argument %u doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u doesn't exist in '%s'"), spec1->numbered[i].number, pretty_msgstr); err = true; break; @@ -656,7 +658,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (spec1->numbered[i].type != spec2->numbered[j].type) { if (error_logger) - error_logger (_("format specifications in '%s' and '%s' for argument %u are not the same"), + error_logger (error_logger_data, + _("format specifications in '%s' and '%s' for argument %u are not the same"), pretty_msgid, pretty_msgstr, spec2->numbered[j].number); err = true; @@ -675,10 +678,12 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (error_logger) { if (spec1->uses_err_no) - error_logger (_("'%s' uses %%m but '%s' doesn't"), + error_logger (error_logger_data, + _("'%s' uses %%m but '%s' doesn't"), pretty_msgid, pretty_msgstr); else - error_logger (_("'%s' does not use %%m but '%s' uses %%m"), + error_logger (error_logger_data, + _("'%s' does not use %%m but '%s' uses %%m"), pretty_msgid, pretty_msgstr); } err = true; diff --git a/gettext-tools/src/format-gfc-internal.c b/gettext-tools/src/format-gfc-internal.c index db7266f78..04a9b6d8b 100644 --- a/gettext-tools/src/format-gfc-internal.c +++ b/gettext-tools/src/format-gfc-internal.c @@ -1,5 +1,5 @@ /* GFC (GNU Fortran Compiler) internal format strings. - Copyright (C) 2003-2009, 2019-2020, 2022 Free Software Foundation, Inc. + Copyright (C) 2003-2023 Free Software Foundation, Inc. Written by Bruno Haible , 2009. This program is free software: you can redistribute it and/or modify @@ -346,7 +346,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -360,7 +360,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, : spec1->unnumbered_arg_count < spec2->unnumbered_arg_count) { if (error_logger) - error_logger (_("number of format specifications in '%s' and '%s' does not match"), + error_logger (error_logger_data, + _("number of format specifications in '%s' and '%s' does not match"), pretty_msgid, pretty_msgstr); err = true; } @@ -369,7 +370,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (spec1->unnumbered[i].type != spec2->unnumbered[i].type) { if (error_logger) - error_logger (_("format specifications in '%s' and '%s' for argument %u are not the same"), + error_logger (error_logger_data, + _("format specifications in '%s' and '%s' for argument %u are not the same"), pretty_msgid, pretty_msgstr, i + 1); err = true; } @@ -380,10 +382,12 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (error_logger) { if (spec1->uses_currentloc) - error_logger (_("'%s' uses %%C but '%s' doesn't"), + error_logger (error_logger_data, + _("'%s' uses %%C but '%s' doesn't"), pretty_msgid, pretty_msgstr); else - error_logger (_("'%s' does not use %%C but '%s' uses %%C"), + error_logger (error_logger_data, + _("'%s' does not use %%C but '%s' uses %%C"), pretty_msgid, pretty_msgstr); } err = true; diff --git a/gettext-tools/src/format-java-printf.c b/gettext-tools/src/format-java-printf.c index 580fb3b07..1e76fd624 100644 --- a/gettext-tools/src/format-java-printf.c +++ b/gettext-tools/src/format-java-printf.c @@ -550,7 +550,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -576,7 +576,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (cmp > 0) { if (error_logger) - error_logger (_("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), spec2->numbered[j].number, pretty_msgstr, pretty_msgid); err = true; @@ -587,7 +588,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (equality) { if (error_logger) - error_logger (_("a format specification for argument %u doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u doesn't exist in '%s'"), spec1->numbered[i].number, pretty_msgstr); err = true; break; @@ -607,7 +609,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (spec1->numbered[i].type != spec2->numbered[j].type) { if (error_logger) - error_logger (_("format specifications in '%s' and '%s' for argument %u are not the same"), + error_logger (error_logger_data, + _("format specifications in '%s' and '%s' for argument %u are not the same"), pretty_msgid, pretty_msgstr, spec2->numbered[j].number); err = true; diff --git a/gettext-tools/src/format-java.c b/gettext-tools/src/format-java.c index bba2a4308..7de2bceae 100644 --- a/gettext-tools/src/format-java.c +++ b/gettext-tools/src/format-java.c @@ -717,7 +717,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -743,7 +743,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (cmp > 0) { if (error_logger) - error_logger (_("a format specification for argument {%u}, as in '%s', doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument {%u}, as in '%s', doesn't exist in '%s'"), spec2->numbered[j].number, pretty_msgstr, pretty_msgid); err = true; @@ -754,7 +755,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (equality) { if (error_logger) - error_logger (_("a format specification for argument {%u} doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument {%u} doesn't exist in '%s'"), spec1->numbered[i].number, pretty_msgstr); err = true; break; @@ -774,7 +776,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (spec1->numbered[i].type != spec2->numbered[j].type) { if (error_logger) - error_logger (_("format specifications in '%s' and '%s' for argument {%u} are not the same"), + error_logger (error_logger_data, + _("format specifications in '%s' and '%s' for argument {%u} are not the same"), pretty_msgid, pretty_msgstr, spec2->numbered[j].number); err = true; diff --git a/gettext-tools/src/format-javascript.c b/gettext-tools/src/format-javascript.c index 0f716c9bb..79d87e1ae 100644 --- a/gettext-tools/src/format-javascript.c +++ b/gettext-tools/src/format-javascript.c @@ -328,7 +328,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -353,7 +353,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (cmp > 0) { if (error_logger) - error_logger (_("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), spec2->numbered[j].number, pretty_msgstr, pretty_msgid); err = true; @@ -364,7 +365,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (equality) { if (error_logger) - error_logger (_("a format specification for argument %u doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u doesn't exist in '%s'"), spec1->numbered[i].number, pretty_msgstr); err = true; break; @@ -387,7 +389,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, || spec2->numbered[i].type == FAT_ANY)))) { if (error_logger) - error_logger (_("format specifications in '%s' and '%s' for argument %u are not the same"), + error_logger (error_logger_data, + _("format specifications in '%s' and '%s' for argument %u are not the same"), pretty_msgid, pretty_msgstr, spec2->numbered[j].number); err = true; diff --git a/gettext-tools/src/format-kde-kuit.c b/gettext-tools/src/format-kde-kuit.c index 44a117bc3..77add0ceb 100644 --- a/gettext-tools/src/format-kde-kuit.c +++ b/gettext-tools/src/format-kde-kuit.c @@ -1,5 +1,5 @@ /* KUIT (KDE User Interface Text) format strings. - Copyright (C) 2015, 2018-2019 Free Software Foundation, Inc. + Copyright (C) 2015-2023 Free Software Foundation, Inc. Written by Daiki Ueno , 2015. This program is free software: you can redistribute it and/or modify @@ -312,14 +312,14 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *msgid_spec = msgid_descr; struct spec *msgstr_spec = msgstr_descr; return formatstring_kde.check (msgid_spec->base, msgstr_spec->base, equality, - error_logger, + error_logger, error_logger_data, pretty_msgid, pretty_msgstr); } diff --git a/gettext-tools/src/format-kde.c b/gettext-tools/src/format-kde.c index 9fa1ecb3d..d84627522 100644 --- a/gettext-tools/src/format-kde.c +++ b/gettext-tools/src/format-kde.c @@ -193,7 +193,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -220,7 +220,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (cmp > 0) { if (error_logger) - error_logger (_("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), spec2->numbered[j].number, pretty_msgstr, pretty_msgid); err = true; @@ -231,7 +232,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (equality) { if (error_logger) - error_logger (_("a format specification for argument %u doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u doesn't exist in '%s'"), spec1->numbered[i].number, pretty_msgstr); err = true; break; @@ -239,7 +241,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, else if (missing) { if (error_logger) - error_logger (_("a format specification for arguments %u and %u doesn't exist in '%s', only one argument may be ignored"), + error_logger (error_logger_data, + _("a format specification for arguments %u and %u doesn't exist in '%s', only one argument may be ignored"), missing, spec1->numbered[i].number, pretty_msgstr); err = true; diff --git a/gettext-tools/src/format-librep.c b/gettext-tools/src/format-librep.c index 948ce0135..66824c174 100644 --- a/gettext-tools/src/format-librep.c +++ b/gettext-tools/src/format-librep.c @@ -283,7 +283,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -309,7 +309,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (cmp > 0) { if (error_logger) - error_logger (_("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), spec2->numbered[j].number, pretty_msgstr, pretty_msgid); err = true; @@ -320,7 +321,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (equality) { if (error_logger) - error_logger (_("a format specification for argument %u doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u doesn't exist in '%s'"), spec1->numbered[i].number, pretty_msgstr); err = true; break; @@ -340,7 +342,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (spec1->numbered[i].type != spec2->numbered[j].type) { if (error_logger) - error_logger (_("format specifications in '%s' and '%s' for argument %u are not the same"), + error_logger (error_logger_data, + _("format specifications in '%s' and '%s' for argument %u are not the same"), pretty_msgid, pretty_msgstr, spec2->numbered[j].number); err = true; diff --git a/gettext-tools/src/format-lisp.c b/gettext-tools/src/format-lisp.c index 2491256db..f0c17888d 100644 --- a/gettext-tools/src/format-lisp.c +++ b/gettext-tools/src/format-lisp.c @@ -3478,7 +3478,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -3490,7 +3490,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (!equal_list (spec1->list, spec2->list)) { if (error_logger) - error_logger (_("format specifications in '%s' and '%s' are not equivalent"), + error_logger (error_logger_data, + _("format specifications in '%s' and '%s' are not equivalent"), pretty_msgid, pretty_msgstr); err = true; } @@ -3506,7 +3507,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, equal_list (intersection, spec2->list)))) { if (error_logger) - error_logger (_("format specifications in '%s' are not a subset of those in '%s'"), + error_logger (error_logger_data, + _("format specifications in '%s' are not a subset of those in '%s'"), pretty_msgstr, pretty_msgid); err = true; } diff --git a/gettext-tools/src/format-lua.c b/gettext-tools/src/format-lua.c index ffd68c7f6..98a9b20ea 100644 --- a/gettext-tools/src/format-lua.c +++ b/gettext-tools/src/format-lua.c @@ -1,5 +1,5 @@ /* Lua format strings. - Copyright (C) 2012-2013, 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2023 Free Software Foundation, Inc. Written by Ľubomír Remák , 2012. This program is free software: you can redistribute it and/or modify @@ -207,7 +207,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -225,21 +225,24 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (i >= n1) { if (error_logger) - error_logger (_("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), i + 1, pretty_msgstr, pretty_msgid); return true; } else if (i >= n2) { if (error_logger) - error_logger (_("a format specification for argument %u doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u doesn't exist in '%s'"), i + 1, pretty_msgstr); return true; } else if (spec1->format_args[i] != spec2->format_args[i]) { if (error_logger) - error_logger (_("format specifications in '%s' and '%s' for argument %u are not the same"), + error_logger (error_logger_data, + _("format specifications in '%s' and '%s' for argument %u are not the same"), pretty_msgid, pretty_msgstr, i + 1); return true; } diff --git a/gettext-tools/src/format-pascal.c b/gettext-tools/src/format-pascal.c index d5ba4a860..07b0021a4 100644 --- a/gettext-tools/src/format-pascal.c +++ b/gettext-tools/src/format-pascal.c @@ -366,7 +366,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -392,7 +392,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (cmp > 0) { if (error_logger) - error_logger (_("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), spec2->numbered[j].number, pretty_msgstr, pretty_msgid); err = true; @@ -403,7 +404,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (equality) { if (error_logger) - error_logger (_("a format specification for argument %u doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u doesn't exist in '%s'"), spec1->numbered[i].number, pretty_msgstr); err = true; break; @@ -423,7 +425,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (spec1->numbered[i].type != spec2->numbered[j].type) { if (error_logger) - error_logger (_("format specifications in '%s' and '%s' for argument %u are not the same"), + error_logger (error_logger_data, + _("format specifications in '%s' and '%s' for argument %u are not the same"), pretty_msgid, pretty_msgstr, spec2->numbered[j].number); err = true; diff --git a/gettext-tools/src/format-perl-brace.c b/gettext-tools/src/format-perl-brace.c index 3e3b9d6bd..60613ac8b 100644 --- a/gettext-tools/src/format-perl-brace.c +++ b/gettext-tools/src/format-perl-brace.c @@ -1,5 +1,5 @@ /* Perl brace format strings. - Copyright (C) 2004, 2006-2007, 2009, 2019-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2023 Free Software Foundation, Inc. Written by Bruno Haible , 2003. This program is free software: you can redistribute it and/or modify @@ -166,7 +166,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -196,7 +196,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (equality) { if (error_logger) - error_logger (_("a format specification for argument '%s' doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument '%s' doesn't exist in '%s'"), spec1->named[i].name, pretty_msgstr); err = true; break; diff --git a/gettext-tools/src/format-perl.c b/gettext-tools/src/format-perl.c index 0a8a78c9e..3e2d917af 100644 --- a/gettext-tools/src/format-perl.c +++ b/gettext-tools/src/format-perl.c @@ -553,7 +553,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -579,7 +579,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (cmp > 0) { if (error_logger) - error_logger (_("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), spec2->numbered[j].number, pretty_msgstr, pretty_msgid); err = true; @@ -590,7 +591,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (equality) { if (error_logger) - error_logger (_("a format specification for argument %u doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u doesn't exist in '%s'"), spec1->numbered[i].number, pretty_msgstr); err = true; break; @@ -610,7 +612,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (spec1->numbered[i].type != spec2->numbered[j].type) { if (error_logger) - error_logger (_("format specifications in '%s' and '%s' for argument %u are not the same"), + error_logger (error_logger_data, + _("format specifications in '%s' and '%s' for argument %u are not the same"), pretty_msgid, pretty_msgstr, spec2->numbered[j].number); err = true; diff --git a/gettext-tools/src/format-php.c b/gettext-tools/src/format-php.c index 668b13c04..4a37cfee8 100644 --- a/gettext-tools/src/format-php.c +++ b/gettext-tools/src/format-php.c @@ -319,7 +319,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -345,7 +345,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (cmp > 0) { if (error_logger) - error_logger (_("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), spec2->numbered[j].number, pretty_msgstr, pretty_msgid); err = true; @@ -356,7 +357,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (equality) { if (error_logger) - error_logger (_("a format specification for argument %u doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u doesn't exist in '%s'"), spec1->numbered[i].number, pretty_msgstr); err = true; break; @@ -376,7 +378,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (spec1->numbered[i].type != spec2->numbered[j].type) { if (error_logger) - error_logger (_("format specifications in '%s' and '%s' for argument %u are not the same"), + error_logger (error_logger_data, + _("format specifications in '%s' and '%s' for argument %u are not the same"), pretty_msgid, pretty_msgstr, spec2->numbered[j].number); err = true; diff --git a/gettext-tools/src/format-python-brace.c b/gettext-tools/src/format-python-brace.c index cd5307721..692422075 100644 --- a/gettext-tools/src/format-python-brace.c +++ b/gettext-tools/src/format-python-brace.c @@ -449,7 +449,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -475,7 +475,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (equality) { if (error_logger) - error_logger (_("a format specification for argument '%s' doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument '%s' doesn't exist in '%s'"), spec2->named[i].name, pretty_msgid); err = true; break; @@ -488,7 +489,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (equality) { if (error_logger) - error_logger (_("a format specification for argument '%s' doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument '%s' doesn't exist in '%s'"), spec1->named[i].name, pretty_msgstr); err = true; break; diff --git a/gettext-tools/src/format-python.c b/gettext-tools/src/format-python.c index aac84e6f3..ebe18d046 100644 --- a/gettext-tools/src/format-python.c +++ b/gettext-tools/src/format-python.c @@ -417,7 +417,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -427,14 +427,16 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (spec1->named_arg_count > 0 && spec2->unnamed_arg_count > 0) { if (error_logger) - error_logger (_("format specifications in '%s' expect a mapping, those in '%s' expect a tuple"), + error_logger (error_logger_data, + _("format specifications in '%s' expect a mapping, those in '%s' expect a tuple"), pretty_msgid, pretty_msgstr); err = true; } else if (spec1->unnamed_arg_count > 0 && spec2->named_arg_count > 0) { if (error_logger) - error_logger (_("format specifications in '%s' expect a tuple, those in '%s' expect a mapping"), + error_logger (error_logger_data, + _("format specifications in '%s' expect a tuple, those in '%s' expect a mapping"), pretty_msgid, pretty_msgstr); err = true; } @@ -457,7 +459,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (cmp > 0) { if (error_logger) - error_logger (_("a format specification for argument '%s', as in '%s', doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument '%s', as in '%s', doesn't exist in '%s'"), spec2->named[j].name, pretty_msgstr, pretty_msgid); err = true; @@ -468,7 +471,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (equality) { if (error_logger) - error_logger (_("a format specification for argument '%s' doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument '%s' doesn't exist in '%s'"), spec1->named[i].name, pretty_msgstr); err = true; break; @@ -491,7 +495,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, || spec2->named[j].type == FAT_ANY)))) { if (error_logger) - error_logger (_("format specifications in '%s' and '%s' for argument '%s' are not the same"), + error_logger (error_logger_data, + _("format specifications in '%s' and '%s' for argument '%s' are not the same"), pretty_msgid, pretty_msgstr, spec2->named[j].name); err = true; @@ -512,7 +517,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (spec1->unnamed_arg_count != spec2->unnamed_arg_count) { if (error_logger) - error_logger (_("number of format specifications in '%s' and '%s' does not match"), + error_logger (error_logger_data, + _("number of format specifications in '%s' and '%s' does not match"), pretty_msgid, pretty_msgstr); err = true; } @@ -524,7 +530,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, || spec2->unnamed[i].type == FAT_ANY)))) { if (error_logger) - error_logger (_("format specifications in '%s' and '%s' for argument %u are not the same"), + error_logger (error_logger_data, + _("format specifications in '%s' and '%s' for argument %u are not the same"), pretty_msgid, pretty_msgstr, i + 1); err = true; } diff --git a/gettext-tools/src/format-qt-plural.c b/gettext-tools/src/format-qt-plural.c index 0ea733857..eeb18d455 100644 --- a/gettext-tools/src/format-qt-plural.c +++ b/gettext-tools/src/format-qt-plural.c @@ -1,5 +1,5 @@ /* Qt plural format strings. - Copyright (C) 2003-2004, 2006-2007, 2009, 2019 Free Software Foundation, Inc. + Copyright (C) 2003-2023 Free Software Foundation, Inc. Written by Bruno Haible , 2009. This program is free software: you can redistribute it and/or modify @@ -95,7 +95,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -107,7 +107,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, || (equality && spec1->directives > 0 && spec2->directives == 0)) { if (error_logger) - error_logger (_("number of format specifications in '%s' and '%s' does not match"), + error_logger (error_logger_data, + _("number of format specifications in '%s' and '%s' does not match"), pretty_msgid, pretty_msgstr); err = true; } diff --git a/gettext-tools/src/format-qt.c b/gettext-tools/src/format-qt.c index 091838141..f2912e373 100644 --- a/gettext-tools/src/format-qt.c +++ b/gettext-tools/src/format-qt.c @@ -1,5 +1,5 @@ /* Qt format strings. - Copyright (C) 2003-2004, 2006-2007, 2009, 2019 Free Software Foundation, Inc. + Copyright (C) 2003-2023 Free Software Foundation, Inc. Written by Bruno Haible , 2003. This program is free software: you can redistribute it and/or modify @@ -138,7 +138,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -149,7 +149,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (spec1->simple && !spec2->simple) { if (error_logger) - error_logger (_("'%s' is a simple format string, but '%s' is not: it contains an 'L' flag or a double-digit argument number"), + error_logger (error_logger_data, + _("'%s' is a simple format string, but '%s' is not: it contains an 'L' flag or a double-digit argument number"), pretty_msgid, pretty_msgstr); err = true; } @@ -167,10 +168,12 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (error_logger) { if (arg_used1) - error_logger (_("a format specification for argument %u doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u doesn't exist in '%s'"), i, pretty_msgstr); else - error_logger (_("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), i, pretty_msgstr, pretty_msgid); } err = true; diff --git a/gettext-tools/src/format-ruby.c b/gettext-tools/src/format-ruby.c index 537b7bd5a..1648c8d2b 100644 --- a/gettext-tools/src/format-ruby.c +++ b/gettext-tools/src/format-ruby.c @@ -856,7 +856,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -866,14 +866,16 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (spec1->named_arg_count > 0 && spec2->numbered_arg_count > 0) { if (error_logger) - error_logger (_("format specifications in '%s' expect a hash table, those in '%s' expect individual arguments"), + error_logger (error_logger_data, + _("format specifications in '%s' expect a hash table, those in '%s' expect individual arguments"), pretty_msgid, pretty_msgstr); err = true; } else if (spec1->numbered_arg_count > 0 && spec2->named_arg_count > 0) { if (error_logger) - error_logger (_("format specifications in '%s' expect individual arguments, those in '%s' expect a hash table"), + error_logger (error_logger_data, + _("format specifications in '%s' expect individual arguments, those in '%s' expect a hash table"), pretty_msgid, pretty_msgstr); err = true; } @@ -896,7 +898,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (cmp > 0) { if (error_logger) - error_logger (_("a format specification for argument '%s', as in '%s', doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument '%s', as in '%s', doesn't exist in '%s'"), spec2->named[j].name, pretty_msgstr, pretty_msgid); err = true; @@ -907,7 +910,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (equality) { if (error_logger) - error_logger (_("a format specification for argument '%s' doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument '%s' doesn't exist in '%s'"), spec1->named[i].name, pretty_msgstr); err = true; break; @@ -927,7 +931,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (!(spec1->named[i].type == spec2->named[j].type)) { if (error_logger) - error_logger (_("format specifications in '%s' and '%s' for argument '%s' are not the same"), + error_logger (error_logger_data, + _("format specifications in '%s' and '%s' for argument '%s' are not the same"), pretty_msgid, pretty_msgstr, spec2->named[j].name); err = true; @@ -948,7 +953,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (spec1->numbered_arg_count != spec2->numbered_arg_count) { if (error_logger) - error_logger (_("number of format specifications in '%s' and '%s' does not match"), + error_logger (error_logger_data, + _("number of format specifications in '%s' and '%s' does not match"), pretty_msgid, pretty_msgstr); err = true; } @@ -957,7 +963,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (!(spec1->numbered[i].type == spec2->numbered[i].type)) { if (error_logger) - error_logger (_("format specifications in '%s' and '%s' for argument %u are not the same"), + error_logger (error_logger_data, + _("format specifications in '%s' and '%s' for argument %u are not the same"), pretty_msgid, pretty_msgstr, i + 1); err = true; } diff --git a/gettext-tools/src/format-scheme.c b/gettext-tools/src/format-scheme.c index 0264cf892..2084fdb68 100644 --- a/gettext-tools/src/format-scheme.c +++ b/gettext-tools/src/format-scheme.c @@ -3401,7 +3401,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -3413,7 +3413,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (!equal_list (spec1->list, spec2->list)) { if (error_logger) - error_logger (_("format specifications in '%s' and '%s' are not equivalent"), + error_logger (error_logger_data, + _("format specifications in '%s' and '%s' are not equivalent"), pretty_msgid, pretty_msgstr); err = true; } @@ -3429,7 +3430,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, equal_list (intersection, spec2->list)))) { if (error_logger) - error_logger (_("format specifications in '%s' are not a subset of those in '%s'"), + error_logger (error_logger_data, + _("format specifications in '%s' are not a subset of those in '%s'"), pretty_msgstr, pretty_msgid); err = true; } diff --git a/gettext-tools/src/format-sh.c b/gettext-tools/src/format-sh.c index ce6bf3fb3..d20f58bc3 100644 --- a/gettext-tools/src/format-sh.c +++ b/gettext-tools/src/format-sh.c @@ -270,7 +270,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -294,7 +294,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (cmp > 0) { if (error_logger) - error_logger (_("a format specification for argument '%s', as in '%s', doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument '%s', as in '%s', doesn't exist in '%s'"), spec2->named[j].name, pretty_msgstr, pretty_msgid); err = true; @@ -305,7 +306,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (equality) { if (error_logger) - error_logger (_("a format specification for argument '%s' doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument '%s' doesn't exist in '%s'"), spec1->named[i].name, pretty_msgstr); err = true; break; diff --git a/gettext-tools/src/format-smalltalk.c b/gettext-tools/src/format-smalltalk.c index 711aa6dc2..a6038ce03 100644 --- a/gettext-tools/src/format-smalltalk.c +++ b/gettext-tools/src/format-smalltalk.c @@ -1,5 +1,5 @@ /* Smalltalk and YCP format strings. - Copyright (C) 2001-2004, 2006-2007, 2009, 2019-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2023 Free Software Foundation, Inc. Written by Bruno Haible , 2001. This program is free software: you can redistribute it and/or modify @@ -123,7 +123,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -141,10 +141,12 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (error_logger) { if (arg_used1) - error_logger (_("a format specification for argument %u doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u doesn't exist in '%s'"), i + 1, pretty_msgstr); else - error_logger (_("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), i + 1, pretty_msgstr, pretty_msgid); } err = true; diff --git a/gettext-tools/src/format-tcl.c b/gettext-tools/src/format-tcl.c index a1d87b301..ff722b515 100644 --- a/gettext-tools/src/format-tcl.c +++ b/gettext-tools/src/format-tcl.c @@ -362,7 +362,7 @@ format_get_number_of_directives (void *descr) static bool format_check (void *msgid_descr, void *msgstr_descr, bool equality, - formatstring_error_logger_t error_logger, + formatstring_error_logger_t error_logger, void *error_logger_data, const char *pretty_msgid, const char *pretty_msgstr) { struct spec *spec1 = (struct spec *) msgid_descr; @@ -388,7 +388,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (cmp > 0) { if (error_logger) - error_logger (_("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u, as in '%s', doesn't exist in '%s'"), spec2->numbered[j].number, pretty_msgstr, pretty_msgid); err = true; @@ -399,7 +400,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (equality) { if (error_logger) - error_logger (_("a format specification for argument %u doesn't exist in '%s'"), + error_logger (error_logger_data, + _("a format specification for argument %u doesn't exist in '%s'"), spec1->numbered[i].number, pretty_msgstr); err = true; break; @@ -419,7 +421,8 @@ format_check (void *msgid_descr, void *msgstr_descr, bool equality, if (spec1->numbered[i].type != spec2->numbered[j].type) { if (error_logger) - error_logger (_("format specifications in '%s' and '%s' for argument %u are not the same"), + error_logger (error_logger_data, + _("format specifications in '%s' and '%s' for argument %u are not the same"), pretty_msgid, pretty_msgstr, spec2->numbered[j].number); err = true; diff --git a/gettext-tools/src/format.c b/gettext-tools/src/format.c index c70da9518..047160b12 100644 --- a/gettext-tools/src/format.c +++ b/gettext-tools/src/format.c @@ -75,7 +75,7 @@ check_msgid_msgstr_format_i (const char *msgid, const char *msgid_plural, size_t i, struct argument_range range, const struct plural_distribution *distribution, - formatstring_error_logger_t error_logger) + formatstring_error_logger_t error_logger, void *error_logger_data) { int seen_errors = 0; @@ -145,14 +145,16 @@ check_msgid_msgstr_format_i (const char *msgid, const char *msgid_plural, if (parser->check (msgid_descr, msgstr_descr, strict_checking, - error_logger, pretty_msgid, pretty_msgstr)) + error_logger, error_logger_data, + pretty_msgid, pretty_msgstr)) seen_errors++; parser->free (msgstr_descr); } else { - error_logger (_("'%s' is not a valid %s format string, unlike '%s'. Reason: %s"), + error_logger (error_logger_data, + _("'%s' is not a valid %s format string, unlike '%s'. Reason: %s"), pretty_msgstr, format_language_pretty[i], pretty_msgid, invalid_reason); seen_errors++; @@ -177,7 +179,7 @@ check_msgid_msgstr_format (const char *msgid, const char *msgid_plural, const enum is_format is_format[NFORMATS], struct argument_range range, const struct plural_distribution *distribution, - formatstring_error_logger_t error_logger) + formatstring_error_logger_t error_logger, void *error_logger_data) { int seen_errors = 0; size_t i; @@ -194,7 +196,7 @@ check_msgid_msgstr_format (const char *msgid, const char *msgid_plural, msgstr, msgstr_len, i, range, distribution, - error_logger); + error_logger, error_logger_data); return seen_errors; } diff --git a/gettext-tools/src/format.h b/gettext-tools/src/format.h index 650f0ee45..50276dfd8 100644 --- a/gettext-tools/src/format.h +++ b/gettext-tools/src/format.h @@ -53,9 +53,9 @@ enum fdi[(ptr) - format_start] |= (flag)/*;*/ /* This type of callback is responsible for showing an error. */ -typedef void (*formatstring_error_logger_t) (const char *format, ...) +typedef void (*formatstring_error_logger_t) (void *data, const char *format, ...) #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) - __attribute__ ((__format__ (__printf__, 1, 2))) + __attribute__ ((__format__ (__printf__, 2, 3))) #endif ; @@ -92,7 +92,9 @@ struct formatstring_parser msgstr_descr may omit some of the arguments of msgid_descr). If not, signal an error using error_logger (only if error_logger != NULL) and return true. Otherwise return false. */ - bool (*check) (void *msgid_descr, void *msgstr_descr, bool equality, formatstring_error_logger_t error_logger, const char *pretty_msgid, const char *pretty_msgstr); + bool (*check) (void *msgid_descr, void *msgstr_descr, bool equality, + formatstring_error_logger_t error_logger, void *error_logger_data, + const char *pretty_msgid, const char *pretty_msgstr); }; /* Format string parsers, each defined in its own file. */ @@ -158,7 +160,7 @@ extern int size_t i, struct argument_range range, const struct plural_distribution *distribution, - formatstring_error_logger_t error_logger); + formatstring_error_logger_t error_logger, void *error_logger_data); /* Check whether both formats strings contain compatible format specifications. @@ -169,7 +171,7 @@ extern int const enum is_format is_format[NFORMATS], struct argument_range range, const struct plural_distribution *distribution, - formatstring_error_logger_t error_logger); + formatstring_error_logger_t error_logger, void *error_logger_data); #ifdef __cplusplus diff --git a/gettext-tools/src/msgl-check.c b/gettext-tools/src/msgl-check.c index 5415edb66..1a668c298 100644 --- a/gettext-tools/src/msgl-check.c +++ b/gettext-tools/src/msgl-check.c @@ -502,17 +502,22 @@ check_plural (message_list_ty *mlp, /* Signal an error when checking format strings. */ -static const message_ty *curr_mp; -static lex_pos_ty curr_msgid_pos; +struct formatstring_error_logger_locals +{ + const message_ty *curr_mp; + lex_pos_ty curr_msgid_pos; +}; static void -formatstring_error_logger (const char *format, ...) +formatstring_error_logger (void *data, const char *format, ...) #if defined __GNUC__ && ((__GNUC__ == 2 && __GNUC_MINOR__ >= 7) || __GNUC__ > 2) - __attribute__ ((__format__ (__printf__, 1, 2))) + __attribute__ ((__format__ (__printf__, 2, 3))) #endif ; static void -formatstring_error_logger (const char *format, ...) +formatstring_error_logger (void *data, const char *format, ...) { + struct formatstring_error_logger_locals *l = + (struct formatstring_error_logger_locals *) data; va_list args; char *msg; @@ -521,7 +526,8 @@ formatstring_error_logger (const char *format, ...) error (EXIT_FAILURE, 0, _("memory exhausted")); va_end (args); po_xerror (PO_SEVERITY_ERROR, - curr_mp, curr_msgid_pos.file_name, curr_msgid_pos.line_number, + l->curr_mp, + l->curr_msgid_pos.file_name, l->curr_msgid_pos.line_number, (size_t)(-1), false, msg); free (msg); } @@ -655,12 +661,13 @@ check_pair (const message_ty *mp, /* Test 3: Check whether both formats strings contain the same number of format specifications. */ { - curr_mp = mp; - curr_msgid_pos = *msgid_pos; + struct formatstring_error_logger_locals locals; + locals.curr_mp = mp; + locals.curr_msgid_pos = *msgid_pos; seen_errors += check_msgid_msgstr_format (msgid, msgid_plural, msgstr, msgstr_len, is_format, mp->range, distribution, - formatstring_error_logger); + formatstring_error_logger, &locals); } if (check_accelerators && msgid_plural == NULL) diff --git a/gettext-tools/src/msgmerge.c b/gettext-tools/src/msgmerge.c index 397fd675f..9ed18df3e 100644 --- a/gettext-tools/src/msgmerge.c +++ b/gettext-tools/src/msgmerge.c @@ -946,10 +946,10 @@ definitions_destroy (definitions_ty *definitions) /* A silent error logger. We are only interested in knowing whether errors occurred at all. */ static void -silent_error_logger (const char *format, ...) - __attribute__ ((__format__ (__printf__, 1, 2))); +silent_error_logger (void *data, const char *format, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); static void -silent_error_logger (const char *format, ...) +silent_error_logger (void *data, const char *format, ...) { } @@ -1369,7 +1369,8 @@ message_merge (message_ty *def, message_ty *ref, bool force_fuzzy, && !possible_format_p (def->is_format[i]) && check_msgid_msgstr_format_i (ref->msgid, ref->msgid_plural, msgstr, msgstr_len, i, ref->range, - distribution, silent_error_logger) + distribution, + silent_error_logger, NULL) > 0) result->is_fuzzy = true; }