mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 14:17:36 +00:00
LibC+LibKeyboard: Move getkeymap()+setkeymap() syscall wrappers to LibC
This commit is contained in:
parent
a59b1825ce
commit
d32ed28df4
3 changed files with 30 additions and 12 deletions
|
@ -129,4 +129,24 @@ int serenity_readlink(const char* path, size_t path_length, char* buffer, size_t
|
||||||
int rc = syscall(SC_readlink, &small_params);
|
int rc = syscall(SC_readlink, &small_params);
|
||||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int setkeymap(const char* name, const u32* map, u32* const shift_map, const u32* alt_map, const u32* altgr_map, const u32* shift_altgr_map)
|
||||||
|
{
|
||||||
|
Syscall::SC_setkeymap_params params { map, shift_map, alt_map, altgr_map, shift_altgr_map, { name, strlen(name) } };
|
||||||
|
return syscall(SC_setkeymap, ¶ms);
|
||||||
|
}
|
||||||
|
|
||||||
|
int getkeymap(char* name_buffer, size_t name_buffer_size, u32* map, u32* shift_map, u32* alt_map, u32* altgr_map, u32* shift_altgr_map)
|
||||||
|
{
|
||||||
|
Syscall::SC_getkeymap_params params {
|
||||||
|
map,
|
||||||
|
shift_map,
|
||||||
|
alt_map,
|
||||||
|
altgr_map,
|
||||||
|
shift_altgr_map,
|
||||||
|
{ name_buffer, name_buffer_size }
|
||||||
|
};
|
||||||
|
int rc = syscall(SC_getkeymap, ¶ms);
|
||||||
|
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,6 +106,9 @@ int anon_create(size_t size, int options);
|
||||||
|
|
||||||
int serenity_readlink(const char* path, size_t path_length, char* buffer, size_t buffer_size);
|
int serenity_readlink(const char* path, size_t path_length, char* buffer, size_t buffer_size);
|
||||||
|
|
||||||
|
int getkeymap(char* name_buffer, size_t name_buffer_size, u32* map, u32* shift_map, u32* alt_map, u32* altgr_map, u32* shift_altgr_map);
|
||||||
|
int setkeymap(const char* name, const u32* map, u32* const shift_map, const u32* alt_map, const u32* altgr_map, const u32* shift_altgr_map);
|
||||||
|
|
||||||
#ifdef __i386__
|
#ifdef __i386__
|
||||||
ALWAYS_INLINE void send_secret_data_to_userspace_emulator(uintptr_t data1, uintptr_t data2, uintptr_t data3)
|
ALWAYS_INLINE void send_secret_data_to_userspace_emulator(uintptr_t data1, uintptr_t data2, uintptr_t data3)
|
||||||
{
|
{
|
||||||
|
|
|
@ -29,6 +29,10 @@
|
||||||
#include <Kernel/API/Syscall.h>
|
#include <Kernel/API/Syscall.h>
|
||||||
#include <LibKeyboard/CharacterMapFile.h>
|
#include <LibKeyboard/CharacterMapFile.h>
|
||||||
|
|
||||||
|
#ifndef KERNEL
|
||||||
|
# include <serenity.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace Keyboard {
|
namespace Keyboard {
|
||||||
|
|
||||||
#ifndef KERNEL
|
#ifndef KERNEL
|
||||||
|
@ -54,8 +58,7 @@ CharacterMap::CharacterMap(const String& map_name, const CharacterMapData& map_d
|
||||||
|
|
||||||
int CharacterMap::set_system_map()
|
int CharacterMap::set_system_map()
|
||||||
{
|
{
|
||||||
Syscall::SC_setkeymap_params params { m_character_map_data.map, m_character_map_data.shift_map, m_character_map_data.alt_map, m_character_map_data.altgr_map, m_character_map_data.shift_altgr_map, { m_character_map_name.characters(), m_character_map_name.length() } };
|
return setkeymap(m_character_map_name.characters(), m_character_map_data.map, m_character_map_data.shift_map, m_character_map_data.alt_map, m_character_map_data.altgr_map, m_character_map_data.shift_altgr_map);
|
||||||
return syscall(SC_setkeymap, ¶ms);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<CharacterMap, OSError> CharacterMap::fetch_system_map()
|
Result<CharacterMap, OSError> CharacterMap::fetch_system_map()
|
||||||
|
@ -63,16 +66,8 @@ Result<CharacterMap, OSError> CharacterMap::fetch_system_map()
|
||||||
CharacterMapData map_data;
|
CharacterMapData map_data;
|
||||||
char keymap_name[50 + 1] = { 0 };
|
char keymap_name[50 + 1] = { 0 };
|
||||||
|
|
||||||
Syscall::SC_getkeymap_params params {
|
if (getkeymap(keymap_name, sizeof(keymap_name), map_data.map, map_data.shift_map, map_data.alt_map, map_data.altgr_map, map_data.shift_altgr_map) < 0) {
|
||||||
map_data.map, map_data.shift_map,
|
return OSError(errno);
|
||||||
map_data.alt_map,
|
|
||||||
map_data.altgr_map,
|
|
||||||
map_data.shift_altgr_map,
|
|
||||||
{ keymap_name, sizeof(keymap_name) }
|
|
||||||
};
|
|
||||||
int rc = syscall(SC_getkeymap, ¶ms);
|
|
||||||
if (rc < 0) {
|
|
||||||
return OSError(-rc);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return CharacterMap { keymap_name, map_data };
|
return CharacterMap { keymap_name, map_data };
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue