Hi,

Daniel Kiper <daniel.ki...@oracle.com> writes:

> Translators can use http://alpha.gnu.org/pub/gnu/grub/grub-2.06~rc1.pot for 
> translation.
> The pot signature is available at 
> http://alpha.gnu.org/pub/gnu/grub/grub-2.06~rc1.pot.sig

Sorry for the delay to report, but during translation I noticed that two
messages from the POT file have a problem related to the usage of
PRI[ux]GRUB_UINT64_T on format strings. This isn't supported by GNU
Gettext as explained on its manual[1], therefore the strings aren't
extracted properly by xgettext.

The attached patch provides a trivial solution close to the one proposed
by the manual.
From 750ab1afaf54c61d14419b7a5610856879f4851c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Miguel=20=C3=81ngel=20Arruga=20Vivas?=
 <rosen644...@gmail.com>
Date: Mon, 22 Mar 2021 16:12:41 +0100
Subject: [PATCH] i18n: Format large integers before the translation message.

GNU gettext only supports C99 macros for integral types, more specific
macros should be used to format the number to a string before the
internationalization, as explained on the section of gettext's manual
"Preparing Strings":
<http://www.gnu.org/software/gettext/manual/html_node/Preparing-Strings.html#No-string-concatenation>
---
 grub-core/disk/luks2.c             |  5 ++++-
 grub-core/efiemu/i386/loadcore64.c | 14 ++++++++++----
 grub-core/kern/arm64/dl.c          | 12 ++++++++----
 grub-core/kern/ia64/dl.c           | 12 ++++++++----
 grub-core/kern/riscv/dl.c          | 13 +++++++++----
 grub-core/kern/sparc64/dl.c        | 11 +++++++----
 grub-core/kern/x86_64/dl.c         | 12 ++++++++----
 7 files changed, 54 insertions(+), 25 deletions(-)

diff --git a/grub-core/disk/luks2.c b/grub-core/disk/luks2.c
index 125e8609a..5525e3c66 100644
--- a/grub-core/disk/luks2.c
+++ b/grub-core/disk/luks2.c
@@ -612,6 +612,7 @@ luks2_recover_key (grub_disk_t source,
   /* Try all keyslot */
   for (json_idx = 0; json_idx < size; json_idx++)
     {
+      char indexstr[21]; /* log10 (2^64) ~ 20, plus nul character.  */
       typeof (source->total_sectors) max_crypt_sectors = 0;
 
       grub_errno = GRUB_ERR_NONE;
@@ -732,11 +733,13 @@ luks2_recover_key (grub_disk_t source,
 	  continue;
 	}
 
+      grub_snprintf (indexstr, sizeof (indexstr) - 1, "%" PRIuGRUB_UINT64_T,
+		     keyslot.idx);
       /*
        * TRANSLATORS: It's a cryptographic key slot: one element of an array
        * where each element is either empty or holds a key.
        */
-      grub_printf_ (N_("Slot \"%" PRIuGRUB_UINT64_T "\" opened\n"), keyslot.idx);
+      grub_printf_ (N_("Slot \"%s\" opened\n"), indexstr);
 
       candidate_key_len = keyslot.key_size;
       break;
diff --git a/grub-core/efiemu/i386/loadcore64.c b/grub-core/efiemu/i386/loadcore64.c
index 7316efc39..ea0b207c2 100644
--- a/grub-core/efiemu/i386/loadcore64.c
+++ b/grub-core/efiemu/i386/loadcore64.c
@@ -121,10 +121,16 @@ grub_arch_efiemu_relocate_symbols64 (grub_efiemu_segment_t segs,
 		      return err;
                     break;
 		  default:
-		    return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
-				       N_("relocation 0x%" PRIxGRUB_UINT64_T
-					  " is not implemented yet"),
-				       ELF_R_TYPE (rel->r_info));
+		    {
+		      char rel_info[17]; /* log16 (2^64) = 16, plus nul.  */
+		      grub_snprintf (rel_info, sizeof (rel_info) - 1,
+				     "%" PRIxGRUB_UINT64_T,
+				     ELF_R_TYPE (rel->r_info));
+		      return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
+					 N_("relocation 0x%s"
+					    " is not implemented yet"),
+					 rel_info);
+		    }
 		  }
 	      }
 	  }
diff --git a/grub-core/kern/arm64/dl.c b/grub-core/kern/arm64/dl.c
index 401672374..566bb84e0 100644
--- a/grub-core/kern/arm64/dl.c
+++ b/grub-core/kern/arm64/dl.c
@@ -183,10 +183,14 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
 	  break;
 
 	default:
-	  return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
-			     N_("relocation 0x%" PRIxGRUB_UINT64_T
-				" is not implemented yet"),
-			     ELF_R_TYPE (rel->r_info));
+	  {
+	    char rel_info[17]; /* log16 (2^64) = 16, plus nul.  */
+	    grub_snprintf (rel_info, sizeof (rel_info) - 1,
+			   "%" PRIxGRUB_UINT64_T, ELF_R_TYPE (rel->r_info));
+	    return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
+			       N_("relocation 0x%s is not implemented yet"),
+			       rel_info);
+	  }
 	}
     }
 
diff --git a/grub-core/kern/ia64/dl.c b/grub-core/kern/ia64/dl.c
index b19706c50..248e35e2c 100644
--- a/grub-core/kern/ia64/dl.c
+++ b/grub-core/kern/ia64/dl.c
@@ -136,10 +136,14 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
 	case R_IA64_LDXMOV:
 	  break;
 	default:
-	  return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
-			     N_("relocation 0x%" PRIxGRUB_UINT64_T
-				" is not implemented yet"),
-			     ELF_R_TYPE (rel->r_info));
+	  {
+	    char rel_info[17]; /* log16 (2^64) = 16, plus nul.  */
+	    grub_snprintf (rel_info, sizeof (rel_info) - 1,
+			   "%" PRIxGRUB_UINT64_T, ELF_R_TYPE (rel->r_info));
+	    return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
+			       N_("relocation 0x%s is not implemented yet"),
+			       rel_info);
+	  }
 	}
     }
   return GRUB_ERR_NONE;
diff --git a/grub-core/kern/riscv/dl.c b/grub-core/kern/riscv/dl.c
index d78297eee..024486bda 100644
--- a/grub-core/kern/riscv/dl.c
+++ b/grub-core/kern/riscv/dl.c
@@ -330,10 +330,15 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
 	case R_RISCV_RELAX:
 	  break;
 	default:
-	  return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
-			     N_("relocation 0x%" PRIxGRUB_UINT64_T
-				" is not implemented yet"),
-			     (grub_uint64_t) ELF_R_TYPE (rel->r_info));
+	  {
+	    char rel_info[17]; /* log16 (2^64) = 16, plus nul.  */
+	    grub_snprintf (rel_info, sizeof (rel_info) - 1,
+			   "%" PRIxGRUB_UINT64_T,
+			   (grub_uint64_t) ELF_R_TYPE (rel->r_info));
+	    return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
+			       N_("relocation 0x%s is not implemented yet"),
+			       rel_info);
+	  }
 	}
     }
 
diff --git a/grub-core/kern/sparc64/dl.c b/grub-core/kern/sparc64/dl.c
index bbcce8ed5..a20171f1a 100644
--- a/grub-core/kern/sparc64/dl.c
+++ b/grub-core/kern/sparc64/dl.c
@@ -176,10 +176,13 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
 	       & 0x1fff);
 	  break;
 	default:
-	  return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
-			     N_("relocation 0x%" PRIxGRUB_UINT64_T
-				" is not implemented yet"),
-			     ELF_R_TYPE (rel->r_info));
+	  {
+	    char rel_info[17]; /* log16 (2^64) = 16, plus nul.  */
+	    grub_snprintf (rel_info, sizeof (rel_info) - 1,
+			   "%" PRIxGRUB_UINT64_T, ELF_R_TYPE (rel->r_info));
+	    return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
+			       N_("relocation 0x%s is not implemented yet"),
+			       rel_info);
 	}
     }
 
diff --git a/grub-core/kern/x86_64/dl.c b/grub-core/kern/x86_64/dl.c
index 1af5a0eeb..a8c8e90b1 100644
--- a/grub-core/kern/x86_64/dl.c
+++ b/grub-core/kern/x86_64/dl.c
@@ -106,10 +106,14 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
 	  break;
 
 	default:
-	  return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
-			     N_("relocation 0x%" PRIxGRUB_UINT64_T
-			        " is not implemented yet"),
-			     ELF_R_TYPE (rel->r_info));
+	  {
+	    char rel_info[17]; /* log16 (2^64) = 16, plus nul.  */
+	    grub_snprintf (rel_info, sizeof (rel_info) - 1,
+			   "%" PRIxGRUB_UINT64_T, ELF_R_TYPE (rel->r_info));
+	    return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
+			       N_("relocation 0x%s is not implemented yet"),
+			       rel_info);
+	  }
 	}
     }
 
-- 
2.30.0

Best regards,
Miguel

[1] 
http://www.gnu.org/software/gettext/manual/html_node/Preparing-Strings.html#No-string-concatenation

Attachment: signature.asc
Description: PGP signature

_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to