grub-install: Locale depends on nls
With --disable-nls no locales exist. Avoid runtime error by moving code that copies locales into its own function. Return early in case nls was disabled. That way the compiler will throw away unreachable code, no need to put preprocessor conditionals everywhere to avoid warnings about unused code. Fix memleak by freeing srcf and dstf. Convert tabs to spaces in moved code. Signed-off-by: Olaf Hering <olaf@aepfle.de> Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
parent
9dcac673ed
commit
3d8439da8c
1 changed files with 57 additions and 49 deletions
|
@ -592,6 +592,7 @@ copy_all (const char *srcd,
|
|||
grub_util_fd_closedir (d);
|
||||
}
|
||||
|
||||
#if !(defined (GRUB_UTIL) && defined(ENABLE_NLS) && ENABLE_NLS)
|
||||
static const char *
|
||||
get_localedir (void)
|
||||
{
|
||||
|
@ -646,6 +647,59 @@ copy_locales (const char *dstd)
|
|||
}
|
||||
grub_util_fd_closedir (d);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
grub_install_copy_nls(const char *src __attribute__ ((unused)),
|
||||
const char *dst __attribute__ ((unused)))
|
||||
{
|
||||
#if !(defined (GRUB_UTIL) && defined(ENABLE_NLS) && ENABLE_NLS)
|
||||
char *dst_locale;
|
||||
|
||||
dst_locale = grub_util_path_concat (2, dst, "locale");
|
||||
grub_install_mkdir_p (dst_locale);
|
||||
clean_grub_dir (dst_locale);
|
||||
|
||||
if (install_locales.is_default)
|
||||
{
|
||||
char *srcd = grub_util_path_concat (2, src, "po");
|
||||
copy_by_ext (srcd, dst_locale, ".mo", 0);
|
||||
copy_locales (dst_locale);
|
||||
free (srcd);
|
||||
}
|
||||
else
|
||||
{
|
||||
size_t i;
|
||||
const char *locale_dir = get_localedir ();
|
||||
|
||||
for (i = 0; i < install_locales.n_entries; i++)
|
||||
{
|
||||
char *srcf = grub_util_path_concat_ext (3, src, "po",
|
||||
install_locales.entries[i],
|
||||
".mo");
|
||||
char *dstf = grub_util_path_concat_ext (2, dst_locale,
|
||||
install_locales.entries[i],
|
||||
".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],
|
||||
"LC_MESSAGES", PACKAGE, ".mo");
|
||||
if (grub_install_compress_file (srcf, dstf, 0) == 0)
|
||||
grub_util_error (_("cannot find locale `%s'"),
|
||||
install_locales.entries[i]);
|
||||
free (srcf);
|
||||
free (dstf);
|
||||
}
|
||||
}
|
||||
free (dst_locale);
|
||||
#endif
|
||||
}
|
||||
|
||||
static struct
|
||||
{
|
||||
|
@ -731,7 +785,7 @@ grub_install_copy_files (const char *src,
|
|||
const char *dst,
|
||||
enum grub_install_plat platid)
|
||||
{
|
||||
char *dst_platform, *dst_locale, *dst_fonts;
|
||||
char *dst_platform, *dst_fonts;
|
||||
const char *pkgdatadir = grub_util_get_pkgdatadir ();
|
||||
char *themes_dir;
|
||||
|
||||
|
@ -742,13 +796,12 @@ grub_install_copy_files (const char *src,
|
|||
dst_platform = grub_util_path_concat (2, dst, platform);
|
||||
free (platform);
|
||||
}
|
||||
dst_locale = grub_util_path_concat (2, dst, "locale");
|
||||
dst_fonts = grub_util_path_concat (2, dst, "fonts");
|
||||
grub_install_mkdir_p (dst_platform);
|
||||
grub_install_mkdir_p (dst_locale);
|
||||
clean_grub_dir (dst);
|
||||
clean_grub_dir (dst_platform);
|
||||
clean_grub_dir (dst_locale);
|
||||
|
||||
grub_install_copy_nls(src, dst);
|
||||
|
||||
if (install_modules.is_default)
|
||||
copy_by_ext (src, dst_platform, ".mod", 1);
|
||||
|
@ -797,50 +850,6 @@ grub_install_copy_files (const char *src,
|
|||
free (dstf);
|
||||
}
|
||||
|
||||
if (install_locales.is_default)
|
||||
{
|
||||
char *srcd = grub_util_path_concat (2, src, "po");
|
||||
copy_by_ext (srcd, dst_locale, ".mo", 0);
|
||||
copy_locales (dst_locale);
|
||||
free (srcd);
|
||||
}
|
||||
else
|
||||
{
|
||||
const char *locale_dir = get_localedir ();
|
||||
|
||||
for (i = 0; i < install_locales.n_entries; i++)
|
||||
{
|
||||
char *srcf = grub_util_path_concat_ext (3, src,
|
||||
"po",
|
||||
install_locales.entries[i],
|
||||
".mo");
|
||||
char *dstf = grub_util_path_concat_ext (2, dst_locale,
|
||||
install_locales.entries[i],
|
||||
".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],
|
||||
"LC_MESSAGES",
|
||||
PACKAGE,
|
||||
".mo");
|
||||
if (grub_install_compress_file (srcf, dstf, 0))
|
||||
{
|
||||
free (srcf);
|
||||
free (dstf);
|
||||
continue;
|
||||
}
|
||||
grub_util_error (_("cannot find locale `%s'"),
|
||||
install_locales.entries[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (install_themes.is_default)
|
||||
{
|
||||
install_themes.is_default = 0;
|
||||
|
@ -903,7 +912,6 @@ grub_install_copy_files (const char *src,
|
|||
}
|
||||
|
||||
free (dst_platform);
|
||||
free (dst_locale);
|
||||
free (dst_fonts);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue