summaryrefslogtreecommitdiff
path: root/Userland/keymap.cpp
diff options
context:
space:
mode:
authorShannon Booth <shannon.ml.booth@gmail.com>2020-05-03 12:21:37 +1200
committerAndreas Kling <kling@serenityos.org>2020-05-03 11:42:32 +0200
commit637ecdb415e3d2f4e276e0f2d989f6bbed7a4177 (patch)
treebbd7540111e4d18b9ff2a8ece3ce6aee8148080a /Userland/keymap.cpp
parent25cf0da2fb44d040f76dcb7ac8feddc20492ce26 (diff)
downloadserenity-637ecdb415e3d2f4e276e0f2d989f6bbed7a4177.zip
Userland: Fix leak in keymap
Pretty harmless here, but eh
Diffstat (limited to 'Userland/keymap.cpp')
-rw-r--r--Userland/keymap.cpp25
1 files changed, 13 insertions, 12 deletions
diff --git a/Userland/keymap.cpp b/Userland/keymap.cpp
index 1188b62e0e..062325f6ce 100644
--- a/Userland/keymap.cpp
+++ b/Userland/keymap.cpp
@@ -28,21 +28,22 @@
#include <LibCore/File.h>
#include <stdio.h>
-#include <Kernel/Syscall.h>
#include <AK/Optional.h>
#include <AK/StdLibExtras.h>
+#include <AK/Vector.h>
#include <AK/kmalloc.h>
+#include <Kernel/Syscall.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
-char* read_map(const JsonObject& json, const String& name)
+static Vector<char> read_map(const JsonObject& json, const String& name)
{
if (!json.has(name))
- return nullptr;
+ return {};
- char* map = new char[0x80]();
+ Vector<char, 0x80> map;
auto map_arr = json.get(name).as_array();
for (int i = 0; i < map_arr.size(); i++) {
@@ -69,7 +70,7 @@ char* read_map(const JsonObject& json, const String& name)
return map;
}
-RefPtr<Core::File> open_keymap_file(String& filename)
+static RefPtr<Core::File> open_keymap_file(String& filename)
{
auto file = Core::File::construct(filename);
if (file->open(Core::IODevice::ReadOnly))
@@ -89,7 +90,7 @@ RefPtr<Core::File> open_keymap_file(String& filename)
return file;
}
-int read_map_from_file(String& filename)
+static int read_map_from_file(String& filename)
{
auto file = open_keymap_file(filename);
if (!file->is_open()) {
@@ -100,17 +101,17 @@ int read_map_from_file(String& filename)
auto file_contents = file->read_all();
auto json = JsonValue::from_string(file_contents).as_object();
- char* map = read_map(json, "map");
- char* shift_map = read_map(json, "shift_map");
- char* alt_map = read_map(json, "alt_map");
- char* altgr_map = read_map(json, "altgr_map");
+ auto map = read_map(json, "map");
+ auto shift_map = read_map(json, "shift_map");
+ auto alt_map = read_map(json, "alt_map");
+ auto altgr_map = read_map(json, "altgr_map");
- if (!altgr_map) {
+ if (altgr_map.is_empty()) {
// AltGr map was not found, using Alt map as fallback.
altgr_map = alt_map;
}
- Syscall::SC_setkeymap_params params { map, shift_map, alt_map, altgr_map };
+ Syscall::SC_setkeymap_params params { map.data(), shift_map.data(), alt_map.data(), altgr_map.data() };
return syscall(SC_setkeymap, &params);
}