chiark / gitweb /
localectl: read X11 keymaps from the correct file
[elogind.git] / src / locale / localectl.c
index 5739a1dcdd1b79967c8d97ae37b715648457939c..eb94d13ad5b7104c2306e314ea36d9409ec38720 100644 (file)
@@ -37,6 +37,7 @@
 #include "pager.h"
 #include "set.h"
 #include "path-util.h"
+#include "utf8.h"
 
 static bool arg_no_pager = false;
 static enum transport {
@@ -158,7 +159,7 @@ static int show_status(DBusConnection *bus, char **args, unsigned n) {
         const char *interface = "";
         int r;
         DBusMessageIter iter, sub, sub2, sub3;
-        StatusInfo info;
+        StatusInfo info = {};
 
         assert(args);
 
@@ -182,7 +183,6 @@ static int show_status(DBusConnection *bus, char **args, unsigned n) {
                 return -EIO;
         }
 
-        zero(info);
         dbus_message_iter_recurse(&iter, &sub);
 
         while (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_INVALID) {
@@ -360,6 +360,9 @@ static int add_locales_from_archive(Set *locales) {
                 if (e[i].locrec_offset == 0)
                         continue;
 
+                if (!utf8_is_valid((char*) p + e[i].name_offset))
+                        continue;
+
                 z = strdup((char*) p + e[i].name_offset);
                 if (!z) {
                         r = log_oom();
@@ -624,7 +627,7 @@ static int list_x11_keymaps(DBusConnection *bus, char **args, unsigned n) {
                 return -EINVAL;
         }
 
-        f = fopen("/usr/share/X11/xkb/rules/xorg.lst", "re");
+        f = fopen("/usr/share/X11/xkb/rules/base.lst", "re");
         if (!f) {
                 log_error("Failed to open keyboard mapping list. %m");
                 return -errno;