chiark / gitweb /
localectl: fix dbus call arguments in set_x11_keymap
[elogind.git] / src / locale / localectl.c
index c05eba0d3edebfcdedbf1cc20d47230547ddae3b..383a17dee12d93390317706b7edc366fc85f652b 100644 (file)
@@ -19,6 +19,7 @@
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
 ***/
 
+#include <locale.h>
 #include <stdlib.h>
 #include <stdbool.h>
 #include <unistd.h>
@@ -354,7 +355,8 @@ static int list_locales(DBusConnection *bus, char **args, unsigned n) {
             h->locrectab_offset + h->locrectab_size > st.st_size ||
             h->sumhash_offset + h->sumhash_size > st.st_size) {
                 log_error("Invalid archive file.");
-                return -EBADMSG;
+                r = -EBADMSG;
+                goto finish;
         }
 
         e = (const struct namehashent*) ((const uint8_t*) p + h->namehash_offset);
@@ -482,7 +484,8 @@ static int nftw_cb(
 }
 
 static int list_vconsole_keymaps(DBusConnection *bus, char **args, unsigned n) {
-        char **l, **i;
+        char _cleanup_strv_free_ **l = NULL;
+        char **i;
 
         keymaps = set_new(string_hash_func, string_compare_func);
         if (!keymaps)
@@ -512,7 +515,6 @@ static int list_vconsole_keymaps(DBusConnection *bus, char **args, unsigned n) {
         STRV_FOREACH(i, l)
                 puts(*i);
 
-        strv_free(l);
 
         return 0;
 }
@@ -535,7 +537,7 @@ static int set_x11_keymap(DBusConnection *bus, char **args, unsigned n) {
         layout = args[1];
         model = n > 2 ? args[2] : "";
         variant = n > 3 ? args[3] : "";
-        options = n > 3 ? args[4] : "";
+        options = n > 4 ? args[4] : "";
         b = arg_convert;
 
         return bus_method_call_with_reply(
@@ -739,6 +741,7 @@ int main(int argc, char *argv[]) {
 
         dbus_error_init(&error);
 
+        setlocale(LC_ALL, "");
         log_parse_environment();
         log_open();