static void test_get_locales(void) { _cleanup_strv_free_ char **locales = NULL; char **p; int r; r = get_locales(&locales); assert_se(r >= 0); assert_se(locales); STRV_FOREACH(p, locales) { puts(*p); assert_se(locale_is_valid(*p)); }
static int list_locales(int argc, char **argv, void *userdata) { _cleanup_strv_free_ char **l = NULL; int r; r = get_locales(&l); if (r < 0) return log_error_errno(r, "Failed to read list of locales: %m"); (void) pager_open(arg_no_pager, false); strv_print(l); return 0; }
static int prompt_locale(void) { _cleanup_strv_free_ char **locales = NULL; int r; if (arg_locale || arg_locale_messages) return 0; if (!arg_prompt_locale) return 0; r = get_locales(&locales); if (r < 0) { log_error("Cannot query locales list: %s", strerror(-r)); return r; } print_welcome(); printf("\nAvailable Locales:\n\n"); r = show_menu(locales, 3, 22, 60); 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; return 0; }