locale: assume locale is for LANG= when variable name is not specified

Closes #6070.
This commit is contained in:
Yu Watanabe 2018-05-31 16:27:07 +09:00
parent df4fd2c757
commit 4156e767f6
2 changed files with 17 additions and 4 deletions

View File

@ -121,11 +121,12 @@
</varlistentry>
<varlistentry>
<term><command>set-locale LOCALE…</command></term>
<term><command>set-locale LOCALE</command></term>
<term><command>set-locale VARIABLE=LOCALE…</command></term>
<listitem><para>Set the system locale. This takes one or more
assignments such as "LANG=de_DE.utf8",
"LC_MESSAGES=en_GB.utf8", and so on. See
<listitem><para>Set the system locale. This takes one locale such as <literal>en_US.UTF-8</literal>, or takes one or more
locale assignments such as <literal>LANG=de_DE.utf8</literal>, <literal>LC_MESSAGES=en_GB.utf8</literal>, and so on. If
one locale without variable name is provided, then <literal>LANG=</literal> locale variable will be set. See
<citerefentry project='man-pages'><refentrytitle>locale</refentrytitle><manvolnum>7</manvolnum></citerefentry>
for details on the available settings and their meanings. Use
<command>list-locales</command> for a list of available

View File

@ -284,6 +284,18 @@ static int method_set_locale(sd_bus_message *m, void *userdata, sd_bus_error *er
if (r < 0)
return r;
/* If single locale without variable name is provided, then we assume it is LANG=. */
if (strv_length(l) == 1 && !strchr(*l, '=')) {
if (!locale_is_valid(*l))
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid Locale data.");
new_locale[VARIABLE_LANG] = strdup(*l);
if (!new_locale[VARIABLE_LANG])
return -ENOMEM;
l = strv_free(l);
}
/* Check whether a variable is valid */
STRV_FOREACH(i, l) {
bool valid = false;