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:
Olaf Hering 2018-04-13 23:36:49 +02:00 committed by Vincent Batts
parent 5378b6a6fa
commit 5884993495

View file

@ -592,6 +592,7 @@ copy_all (const char *srcd,
grub_util_fd_closedir (d); grub_util_fd_closedir (d);
} }
#if !(defined (GRUB_UTIL) && defined(ENABLE_NLS) && ENABLE_NLS)
static const char * static const char *
get_localedir (void) get_localedir (void)
{ {
@ -646,6 +647,59 @@ copy_locales (const char *dstd)
} }
grub_util_fd_closedir (d); 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 static struct
{ {
@ -731,7 +785,7 @@ grub_install_copy_files (const char *src,
const char *dst, const char *dst,
enum grub_install_plat platid) enum grub_install_plat platid)
{ {
char *dst_platform, *dst_locale, *dst_fonts; char *dst_platform, *dst_fonts;
const char *pkgdatadir = grub_util_get_pkgdatadir (); const char *pkgdatadir = grub_util_get_pkgdatadir ();
char *themes_dir; char *themes_dir;
@ -742,13 +796,12 @@ grub_install_copy_files (const char *src,
dst_platform = grub_util_path_concat (2, dst, platform); dst_platform = grub_util_path_concat (2, dst, platform);
free (platform); free (platform);
} }
dst_locale = grub_util_path_concat (2, dst, "locale");
dst_fonts = grub_util_path_concat (2, dst, "fonts"); dst_fonts = grub_util_path_concat (2, dst, "fonts");
grub_install_mkdir_p (dst_platform); grub_install_mkdir_p (dst_platform);
grub_install_mkdir_p (dst_locale);
clean_grub_dir (dst); clean_grub_dir (dst);
clean_grub_dir (dst_platform); clean_grub_dir (dst_platform);
clean_grub_dir (dst_locale);
grub_install_copy_nls(src, dst);
if (install_modules.is_default) if (install_modules.is_default)
copy_by_ext (src, dst_platform, ".mod", 1); copy_by_ext (src, dst_platform, ".mod", 1);
@ -797,50 +850,6 @@ grub_install_copy_files (const char *src,
free (dstf); 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) if (install_themes.is_default)
{ {
install_themes.is_default = 0; install_themes.is_default = 0;
@ -903,7 +912,6 @@ grub_install_copy_files (const char *src,
} }
free (dst_platform); free (dst_platform);
free (dst_locale);
free (dst_fonts); free (dst_fonts);
} }