mirror of
https://git.proxmox.com/git/grub2
synced 2025-10-20 21:58:44 +00:00

The overflow was in fact impossible in practice because the int parameter is only ever 0, 1, or 2, but GCC couldn't prove that.
119 lines
3.3 KiB
Diff
119 lines
3.3 KiB
Diff
From 03ca727beff305cee6e925af0ec9d37f8f5046f8 Mon Sep 17 00:00:00 2001
|
|
From: Colin Watson <cjwatson@ubuntu.com>
|
|
Date: Mon, 13 Jan 2014 12:13:07 +0000
|
|
Subject: Prefer translations from Ubuntu language packs if available
|
|
|
|
Bug-Ubuntu: https://bugs.launchpad.net/bugs/537998
|
|
Forwarded: not-needed
|
|
Last-Update: 2013-12-25
|
|
|
|
Patch-Name: install_locale_langpack.patch
|
|
---
|
|
util/grub-install-common.c | 40 +++++++++++++++++++++++++++++++++-------
|
|
1 file changed, 33 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/util/grub-install-common.c b/util/grub-install-common.c
|
|
index 452b230da..c9d5e3d0f 100644
|
|
--- a/util/grub-install-common.c
|
|
+++ b/util/grub-install-common.c
|
|
@@ -595,17 +595,25 @@ get_localedir (void)
|
|
}
|
|
|
|
static void
|
|
-copy_locales (const char *dstd)
|
|
+copy_locales (const char *dstd, int langpack)
|
|
{
|
|
grub_util_fd_dir_t d;
|
|
grub_util_fd_dirent_t de;
|
|
const char *locale_dir = get_localedir ();
|
|
+ char *dir;
|
|
|
|
- d = grub_util_fd_opendir (locale_dir);
|
|
+ if (langpack)
|
|
+ dir = xasprintf ("%s-langpack", locale_dir);
|
|
+ else
|
|
+ dir = xstrdup (locale_dir);
|
|
+
|
|
+ d = grub_util_fd_opendir (dir);
|
|
if (!d)
|
|
{
|
|
- grub_util_warn (_("cannot open directory `%s': %s"),
|
|
- locale_dir, grub_util_fd_strerror ());
|
|
+ if (!langpack)
|
|
+ grub_util_warn (_("cannot open directory `%s': %s"),
|
|
+ dir, grub_util_fd_strerror ());
|
|
+ free (dir);
|
|
return;
|
|
}
|
|
|
|
@@ -622,14 +630,14 @@ copy_locales (const char *dstd)
|
|
if (ext && (grub_strcmp (ext, ".mo") == 0
|
|
|| grub_strcmp (ext, ".gmo") == 0))
|
|
{
|
|
- srcf = grub_util_path_concat (2, locale_dir, de->d_name);
|
|
+ srcf = grub_util_path_concat (2, dir, de->d_name);
|
|
dstf = grub_util_path_concat (2, dstd, de->d_name);
|
|
ext = grub_strrchr (dstf, '.');
|
|
grub_strcpy (ext, ".mo");
|
|
}
|
|
else
|
|
{
|
|
- srcf = grub_util_path_concat_ext (4, locale_dir, de->d_name,
|
|
+ srcf = grub_util_path_concat_ext (4, dir, de->d_name,
|
|
"LC_MESSAGES", PACKAGE, ".mo");
|
|
dstf = grub_util_path_concat_ext (2, dstd, de->d_name, ".mo");
|
|
}
|
|
@@ -638,6 +646,7 @@ copy_locales (const char *dstd)
|
|
free (dstf);
|
|
}
|
|
grub_util_fd_closedir (d);
|
|
+ free (dir);
|
|
}
|
|
|
|
static struct
|
|
@@ -793,12 +802,14 @@ grub_install_copy_files (const char *src,
|
|
{
|
|
char *srcd = grub_util_path_concat (2, src, "po");
|
|
copy_by_ext (srcd, dst_locale, ".mo", 0);
|
|
- copy_locales (dst_locale);
|
|
+ copy_locales (dst_locale, 0);
|
|
+ copy_locales (dst_locale, 1);
|
|
free (srcd);
|
|
}
|
|
else
|
|
{
|
|
const char *locale_dir = get_localedir ();
|
|
+ char *locale_langpack_dir = xasprintf ("%s-langpack", locale_dir);
|
|
|
|
for (i = 0; i < install_locales.n_entries; i++)
|
|
{
|
|
@@ -816,6 +827,19 @@ grub_install_copy_files (const char *src,
|
|
continue;
|
|
}
|
|
free (srcf);
|
|
+ srcf = grub_util_path_concat_ext (4,
|
|
+ locale_langpack_dir,
|
|
+ install_locales.entries[i],
|
|
+ "LC_MESSAGES",
|
|
+ PACKAGE,
|
|
+ ".mo");
|
|
+ if (grub_install_compress_file (srcf, dstf, 0))
|
|
+ {
|
|
+ free (srcf);
|
|
+ free (dstf);
|
|
+ continue;
|
|
+ }
|
|
+ free (srcf);
|
|
srcf = grub_util_path_concat_ext (4,
|
|
locale_dir,
|
|
install_locales.entries[i],
|
|
@@ -831,6 +855,8 @@ grub_install_copy_files (const char *src,
|
|
grub_util_error (_("cannot find locale `%s'"),
|
|
install_locales.entries[i]);
|
|
}
|
|
+
|
|
+ free (locale_langpack_dir);
|
|
}
|
|
|
|
if (install_themes.is_default)
|