]> git.ipfire.org Git - thirdparty/gettext.git/commitdiff
libgettextpo: Remove static variables curr_mp, curr_msgid_pos.
authorBruno Haible <bruno@clisp.org>
Sat, 11 Nov 2023 15:48:09 +0000 (16:48 +0100)
committerBruno Haible <bruno@clisp.org>
Sat, 11 Nov 2023 15:48:09 +0000 (16:48 +0100)
* 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.

34 files changed:
gettext-tools/libgettextpo/gettext-po.c
gettext-tools/src/format-awk.c
gettext-tools/src/format-boost.c
gettext-tools/src/format-c++-brace.c
gettext-tools/src/format-c.c
gettext-tools/src/format-csharp.c
gettext-tools/src/format-elisp.c
gettext-tools/src/format-gcc-internal.c
gettext-tools/src/format-gfc-internal.c
gettext-tools/src/format-java-printf.c
gettext-tools/src/format-java.c
gettext-tools/src/format-javascript.c
gettext-tools/src/format-kde-kuit.c
gettext-tools/src/format-kde.c
gettext-tools/src/format-librep.c
gettext-tools/src/format-lisp.c
gettext-tools/src/format-lua.c
gettext-tools/src/format-pascal.c
gettext-tools/src/format-perl-brace.c
gettext-tools/src/format-perl.c
gettext-tools/src/format-php.c
gettext-tools/src/format-python-brace.c
gettext-tools/src/format-python.c
gettext-tools/src/format-qt-plural.c
gettext-tools/src/format-qt.c
gettext-tools/src/format-ruby.c
gettext-tools/src/format-scheme.c
gettext-tools/src/format-sh.c
gettext-tools/src/format-smalltalk.c
gettext-tools/src/format-tcl.c
gettext-tools/src/format.c
gettext-tools/src/format.h
gettext-tools/src/msgl-check.c
gettext-tools/src/msgmerge.c

index 6f0b001c32cd4610b4ae9aa0fd165579cbfa7580..343f03bac7d6da5982f42c1d3532ac0698c6cd16 100644 (file)
@@ -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;
index bcf43540b9040e4a68b5f8f7ff1a18f27113d39a..57b5bcb35bccc919a78e914baa2cc57ea6ca44cc 100644 (file)
@@ -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;
index 71680239d981d63b2b5e1422f539ae161cd8fff0..c191ff1b36dd22a1e85335937ebc76fe9c053c0d 100644 (file)
@@ -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;
index 8082e6c9deb7b116268ce5765b882743695a31a3..05ae444caa3c556e75f5509ec032385fd58f310f 100644 (file)
@@ -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;
index aabddf08917f62332336be3c4211f3ff5b62e417..b30e1c6f0880710c07a1dfbccd801c58b36e8af5 100644 (file)
@@ -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;
         }
index 049a1fcaf616b69bf637070b292bc7718699c68a..225418524324dcd588f4935252146fe30487553d 100644 (file)
@@ -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 <bruno@clisp.org>, 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;
     }
index 01ea279df564586bf44b0e7c6dad768020de7d03..d041cd3b337599675f53efdba6a3773511858d7a 100644 (file)
@@ -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 <haible@clisp.cons.org>, 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;
index 9dbd99b13748bc7d07cadbc6ffc89d88f0afacdd..ce5ea66dd277faadb93ebba76b5edd00b3a76dfd 100644 (file)
@@ -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;
index db7266f7803b92227c17e62277fb3c268e775272..04a9b6d8b19d4d668e6a13303483930a42c5d224 100644 (file)
@@ -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 <bruno@clisp.org>, 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;
index 580fb3b0762bd76c30f152b68ee4756a0dfa0991..1e76fd624faa95841b40a4bd1b1433c5826bc9cd 100644 (file)
@@ -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;
index bba2a4308920483a5b7e763c4f8dddb0ef8853fe..7de2bceaea45c308a11675a8d1f327ac141d1c2c 100644 (file)
@@ -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;
index 0f716c9bb96ed937113781ee311a5e54d9997f93..79d87e1ae2c878abd38c56dfdf8bb44733ceb27c 100644 (file)
@@ -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;
index 44a117bc3b712ab438e8e2cdf9ddc49995ff38d6..77add0ceba9b41c2eb9fdd882358dc2141d48606 100644 (file)
@@ -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 <ueno@gnu.org>, 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);
 }
 
index 9fa1ecb3d1bc28adbad4baea080acc08adc5d044..d846275220b2f1dd5cb4525d0b9b3d00051a7467 100644 (file)
@@ -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;
index 948ce0135bb79c38a1d507cee913fa0f319ab2c4..66824c1749554c972ae7585a2dfcfc978850db9c 100644 (file)
@@ -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;
index 2491256db66d07c13fae2dd909af6063ba084ae5..f0c17888d386f93855a24721cfeb2860a3d2733d 100644 (file)
@@ -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;
         }
index ffd68c7f629d56fa9ce961073da70f15c78cfedf..98a9b20ea026c3c8889db433450ed8648903756f 100644 (file)
@@ -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 <lubomirr@lubomirr.eu>, 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;
             }
index d5ba4a860076436633fac171f34b364260e51a96..07b0021a41bb11b954911cee12a1bae6c0c0af43 100644 (file)
@@ -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;
index 3e3b9d6bd6385e5d25285472909c7cad4482e6d9..60613ac8b3002279ca6aa8cd7f5bd2707a741ba9 100644 (file)
@@ -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 <bruno@clisp.org>, 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;
index 0a8a78c9eafb1ecec601dac903cbe09f702f459b..3e2d917aff9f1d99f4d371c6ea05356dbeb049e0 100644 (file)
@@ -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;
index 668b13c0468fbf6a84c833cbb5465e21b75444bf..4a37cfee8c89127d882aca8b398a8beb5b2aec37 100644 (file)
@@ -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;
index cd53077214b774459bcb2712e16ccfe40adef28a..692422075779f95a53e814290583b3e7a4be2acd 100644 (file)
@@ -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;
index aac84e6f3660a63acfe8b0e97f0ee354fd34c6c7..ebe18d046135bb4abdea82eb67bd3e9a08bc954f 100644 (file)
@@ -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;
                 }
index 0ea733857394033c0a7623e00b26ae2f0e36b9d0..eeb18d45522cf3d55751c72f4c6c24c771187ca8 100644 (file)
@@ -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 <bruno@clisp.org>, 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;
     }
index 0918381416e6b761d114cddb973a91fcf0dd2e64..f2912e373fd67084fe14d4958c1f45bf6d1fa566 100644 (file)
@@ -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 <bruno@clisp.org>, 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;
index 537b7bd5ace0c76f9becc2f3273e3cb280e61ac4..1648c8d2b694eb606262559609b208f7bdb5e0d7 100644 (file)
@@ -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;
                 }
index 0264cf892d2b6b2f9f4abeca1e436c179eb68710..2084fdb68df639723cf4a4d0915377f8b8b600aa 100644 (file)
@@ -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;
         }
index ce6bf3fb3355afe1cd28f3b5f41b062d6843de70..d20f58bc3d397966ed8816177f9b255b68748cc1 100644 (file)
@@ -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;
index 711aa6dc2f287c7bf229a7d2fbb580653409a320..a6038ce034bb855cdea50d8c67cd07a4a7e2f50a 100644 (file)
@@ -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 <haible@clisp.cons.org>, 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;
index a1d87b30134e55dec298d0d1fd2dd88e88464d42..ff722b515797d95d41e7ecbf21be74fa14f00fc0 100644 (file)
@@ -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;
index c70da951870eca4c0a40c32f4f840c2a2e9ad274..047160b120fd1c56aeac3eb88ddf24780c5ca94b 100644 (file)
@@ -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;
 }
index 650f0ee4576af2a6a4e31777e89a71f0c1498f30..50276dfd84c9ed84a88bc8beb06c835a96811460 100644 (file)
@@ -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
index 5415edb66443dd9af11ab86b8d0cc1bc4f3ac23d..1a668c2983fb5490ca968898fa5aff620d783cbd 100644 (file)
@@ -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)
index 397fd675f5794413d45bbf463aa6c5554f913a41..9ed18df3e81c5bb04dd097c66a04373ba9383c5a 100644 (file)
@@ -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;
       }