From 718a665ba9da9d6c87abd9fc55dffa4c3f8a5b33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Fri, 10 Feb 2006 10:13:43 +0000 Subject: [PATCH] fix some memory leaks (part of bug #140 git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16322 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../input_server/devices/keyboard/Keymap.cpp | 18 ++++++++++++++++-- .../input_server/devices/keyboard/Keymap.h | 1 + 2 files changed, 17 insertions(+), 2 deletions(-) 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);