From 2a44f3c936f948d6fedc4729dbf2216da558e490 Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Mon, 28 Jul 2014 12:09:14 +0800 Subject: [PATCH] discover: Add setlocale calls in discover server We want the discover server to respect the configured language, so we'll need to add appropriate setlocale() calls. We use the config->lang setting to use any previously-saved language. Signed-off-by: Jeremy Kerr --- discover/Makefile.am | 4 +++- discover/device-handler.c | 22 ++++++++++++++++++++++ discover/pb-discover.c | 8 ++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/discover/Makefile.am b/discover/Makefile.am index 5d5f5b4..01c29d7 100644 --- a/discover/Makefile.am +++ b/discover/Makefile.am @@ -16,7 +16,9 @@ pkgsysconfdir = @sysconfdir@/@PACKAGE@ SUBDIRS = grub2 -AM_CPPFLAGS = -I$(top_srcdir)/lib $(DEFAULT_CPPFLAGS) +AM_CPPFLAGS = -I$(top_srcdir)/lib \ + -DLOCALEDIR='"$(localedir)"' \ + $(DEFAULT_CPPFLAGS) AM_CFLAGS = $(DEFAULT_CFLAGS) \ -DPREFIX='"$(prefix)"' \ diff --git a/discover/device-handler.c b/discover/device-handler.c index 22866e6..e7990e7 100644 --- a/discover/device-handler.c +++ b/discover/device-handler.c @@ -16,6 +16,7 @@ #include #include #include +#include #include "device-handler.h" #include "discover-server.h" @@ -59,6 +60,8 @@ static int umount_device(struct discover_device *dev); static int device_handler_init_sources(struct device_handler *handler); static void device_handler_reinit_sources(struct device_handler *handler); +static void device_handler_update_lang(const char *lang); + void discover_context_add_boot_option(struct discover_context *ctx, struct discover_boot_option *boot_option) { @@ -824,11 +827,26 @@ void device_handler_update_config(struct device_handler *handler, return; discover_server_notify_config(handler->server, config); + device_handler_update_lang(config->lang); device_handler_reinit(handler); } #ifndef PETITBOOT_TEST +static void device_handler_update_lang(const char *lang) +{ + const char *cur_lang; + + if (!lang) + return; + + cur_lang = setlocale(LC_ALL, NULL); + if (cur_lang && !strcmp(cur_lang, lang)) + return; + + setlocale(LC_ALL, lang); +} + static int device_handler_init_sources(struct device_handler *handler) { /* init our device sources: udev, network and user events */ @@ -1025,6 +1043,10 @@ void device_release_write(struct discover_device *dev, bool release) #else +static void device_handler_update_lang(const char *lang __attribute__((unused))) +{ +} + static int device_handler_init_sources( struct device_handler *handler __attribute__((unused))) { diff --git a/discover/pb-discover.c b/discover/pb-discover.c index f876a3d..81c582d 100644 --- a/discover/pb-discover.c +++ b/discover/pb-discover.c @@ -13,6 +13,7 @@ #include #include #include +#include #include "discover-server.h" #include "device-handler.h" @@ -127,6 +128,10 @@ int main(int argc, char *argv[]) struct opts opts; FILE *log; + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); + if (opts_parse(&opts, argc, argv)) { print_usage(); return EXIT_FAILURE; @@ -177,6 +182,9 @@ int main(int argc, char *argv[]) if (opts.no_autoboot == opt_yes) config_set_autoboot(false); + if (config_get()->lang) + setlocale(LC_ALL, config_get()->lang); + system_info_init(server); handler = device_handler_init(server, waitset, opts.dry_run == opt_yes); -- 2.39.2