diff --git a/src/add-ons/input_server/devices/keyboard/Keymap.cpp b/src/add-ons/input_server/devices/keyboard/Keymap.cpp index fa6609b54a..49a1066d56 100644 --- a/src/add-ons/input_server/devices/keyboard/Keymap.cpp +++ b/src/add-ons/input_server/devices/keyboard/Keymap.cpp @@ -14,6 +14,7 @@ // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ #include "Keymap.h" +#include #include #include #include @@ -80,8 +81,17 @@ Keymap::Keymap() : key_map *keys; get_key_map(&keys, &fChars); - if (keys) + if (keys) { memcpy(&fKeys, keys, sizeof(key_map)); + free(keys); + } +} + + +Keymap::~Keymap() +{ + if (fChars) + free(fChars); } @@ -364,12 +374,16 @@ status_t Keymap::LoadCurrent() { key_map *keys = NULL; + if (fChars) + free(fChars); + fChars = NULL; get_key_map(&keys, &fChars); if (!keys) { fprintf(stderr, "error while getting current keymap!\n"); return B_ERROR; } memcpy(&fKeys, keys, sizeof(fKeys)); - delete keys; + free(keys); return B_OK; } + diff --git a/src/add-ons/input_server/devices/keyboard/Keymap.h b/src/add-ons/input_server/devices/keyboard/Keymap.h index 18c3031ee1..c8f5f06735 100644 --- a/src/add-ons/input_server/devices/keyboard/Keymap.h +++ b/src/add-ons/input_server/devices/keyboard/Keymap.h @@ -23,6 +23,7 @@ class Keymap { public: Keymap(); + ~Keymap(); void DumpKeymap(); bool IsModifierKey(uint32 keyCode); uint32 Modifier(uint32 keyCode);