diff --git a/tools/ei-demo-client.c b/tools/ei-demo-client.c index 93351f9..c93bc54 100644 --- a/tools/ei-demo-client.c +++ b/tools/ei-demo-client.c @@ -55,7 +55,7 @@ #include "src/util-macros.h" #include "src/util-mem.h" -#include "src/util-memfile.h" +#include "src/util-memmap.h" #include "src/util-color.h" #include "src/util-strings.h" #include "src/util-time.h" @@ -84,6 +84,7 @@ colorprint(const char *format, ...) DEFINE_UNREF_CLEANUP_FUNC(xkb_context); DEFINE_UNREF_CLEANUP_FUNC(xkb_keymap); DEFINE_UNREF_CLEANUP_FUNC(xkb_state); +DEFINE_UNREF_CLEANUP_FUNC(memmap); #endif static void @@ -97,12 +98,13 @@ setup_xkb_keymap(struct ei_keymap *keymap) if (!ctx) return; - size_t sz = ei_keymap_get_size(keymap); - _cleanup_free_ char *buf = xalloc(sz + 1); - read(ei_keymap_get_fd(keymap), buf, sz); - buf[sz] = '\0'; + _unref_(memmap) *memmap = memmap_new(ei_keymap_get_fd(keymap), ei_keymap_get_size(keymap)); + if (!memmap) { + colorprint("Failed to mmap XKB keymap: %m\n"); + return; + } - _unref_(xkb_keymap) *xkbmap = xkb_keymap_new_from_string(ctx, buf, + _unref_(xkb_keymap) *xkbmap = xkb_keymap_new_from_string(ctx, memmap_get_data(memmap), XKB_KEYMAP_FORMAT_TEXT_V1, XKB_KEYMAP_COMPILE_NO_FLAGS); if (!xkbmap)