From a924888f0f391088219f7e1356017350b513ecef Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 24 Jul 2024 09:13:17 +1000 Subject: [PATCH] ei-demo-client: use mmap to read the keymap Closes #55 --- tools/ei-demo-client.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) 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)