summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2019-07-12 13:43:31 +0200
committerLennart Poettering <lennart@poettering.net>2019-07-13 11:07:51 +0200
commitbdd7cd264a0afd883260751c64789f4f37dd5ead (patch)
tree900a46e556e69bcb942ac6207ceef33307fc53fa
parentb65011dad080848e52b2077ac2e8030b8cb19f91 (diff)
downloadsystemd-bdd7cd264a0afd883260751c64789f4f37dd5ead.tar.gz
systemd-bdd7cd264a0afd883260751c64789f4f37dd5ead.tar.bz2
systemd-bdd7cd264a0afd883260751c64789f4f37dd5ead.zip
firstboot: suppress locale menu if there's nothing to choose from
-rw-r--r--src/firstboot/firstboot.c49
1 files changed, 35 insertions, 14 deletions
diff --git a/src/firstboot/firstboot.c b/src/firstboot/firstboot.c
index e0c834cfc3..b60ef572cf 100644
--- a/src/firstboot/firstboot.c
+++ b/src/firstboot/firstboot.c
@@ -219,25 +219,46 @@ static int prompt_locale(void) {
if (r < 0)
return log_error_errno(r, "Cannot query locales list: %m");
- print_welcome();
+ if (strv_isempty(locales))
+ log_debug("No locales found, skipping locale selection.");
+ else if (strv_length(locales) == 1) {
- printf("\nAvailable Locales:\n\n");
- r = show_menu(locales, 3, 22, 60);
- if (r < 0)
- return r;
+ if (streq(locales[0], SYSTEMD_DEFAULT_LOCALE))
+ log_debug("Only installed locale is default locale anyway, not setting locale explicitly.");
+ else {
+ log_debug("Only a single locale available (%s), selecting it as default.", locales[0]);
- putchar('\n');
+ arg_locale = strdup(locales[0]);
+ if (!arg_locale)
+ return log_oom();
- r = prompt_loop("Please enter system locale name or number", locales, locale_is_valid, &arg_locale);
- if (r < 0)
- return r;
+ /* Not setting arg_locale_message here, since it defaults to LANG anyway */
+ }
+ } else {
+ print_welcome();
- if (isempty(arg_locale))
- return 0;
+ printf("\nAvailable Locales:\n\n");
+ r = show_menu(locales, 3, 22, 60);
+ if (r < 0)
+ return r;
- r = prompt_loop("Please enter system message locale name or number", locales, locale_is_valid, &arg_locale_messages);
- if (r < 0)
- return r;
+ putchar('\n');
+
+ r = prompt_loop("Please enter system locale name or number", locales, locale_is_valid, &arg_locale);
+ if (r < 0)
+ return r;
+
+ if (isempty(arg_locale))
+ return 0;
+
+ r = prompt_loop("Please enter system message locale name or number", locales, locale_is_valid, &arg_locale_messages);
+ if (r < 0)
+ return r;
+
+ /* Suppress the messages setting if it's the same as the main locale anyway */
+ if (streq_ptr(arg_locale, arg_locale_messages))
+ arg_locale_messages = mfree(arg_locale_messages);
+ }
return 0;
}