tree-wide: port various bits over to locale_is_installed()

This commit is contained in:
Lennart Poettering
2020-05-07 17:24:22 +02:00
parent b45b0a69bb
commit a00a78b84e
4 changed files with 76 additions and 46 deletions
+18 -10
View File
@@ -205,6 +205,14 @@ static int prompt_loop(const char *text, char **l, unsigned percentage, bool (*i
}
}
static bool locale_is_ok(const char *name) {
if (arg_root)
return locale_is_valid(name);
return locale_is_installed(name) > 0;
}
static int prompt_locale(void) {
_cleanup_strv_free_ char **locales = NULL;
int r;
@@ -238,7 +246,7 @@ static int prompt_locale(void) {
print_welcome();
r = prompt_loop("Please enter system locale name or number",
locales, 60, locale_is_valid, &arg_locale);
locales, 60, locale_is_ok, &arg_locale);
if (r < 0)
return r;
@@ -246,7 +254,7 @@ static int prompt_locale(void) {
return 0;
r = prompt_loop("Please enter system message locale name or number",
locales, 60, locale_is_valid, &arg_locale_messages);
locales, 60, locale_is_ok, &arg_locale_messages);
if (r < 0)
return r;
@@ -791,10 +799,6 @@ static int parse_argv(int argc, char *argv[]) {
break;
case ARG_LOCALE:
if (!locale_is_valid(optarg))
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Locale %s is not valid.", optarg);
r = free_and_strdup(&arg_locale, optarg);
if (r < 0)
return log_oom();
@@ -802,10 +806,6 @@ static int parse_argv(int argc, char *argv[]) {
break;
case ARG_LOCALE_MESSAGES:
if (!locale_is_valid(optarg))
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Locale %s is not valid.", optarg);
r = free_and_strdup(&arg_locale_messages, optarg);
if (r < 0)
return log_oom();
@@ -927,6 +927,14 @@ static int parse_argv(int argc, char *argv[]) {
assert_not_reached("Unhandled option");
}
/* We check if the specified locale strings are valid down here, so that we can take --root= into
* account when looking for the locale files. */
if (arg_locale && !locale_is_ok(arg_locale))
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Locale %s is not installed.", arg_locale);
if (arg_locale_messages && !locale_is_ok(arg_locale_messages))
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Locale %s is not installed.", arg_locale_messages);
return 1;
}