Compare commits
3 Commits
51214ea1bf
...
c1f0704fa8
Author | SHA1 | Date |
---|---|---|
Bananymous | c1f0704fa8 | |
Bananymous | 64a63fa4be | |
Bananymous | ab39c6541a |
Binary file not shown.
|
@ -1260,6 +1260,9 @@ namespace Kernel
|
||||||
LockGuard _(m_lock);
|
LockGuard _(m_lock);
|
||||||
TRY(validate_string_access(path));
|
TRY(validate_string_access(path));
|
||||||
|
|
||||||
|
if (!m_credentials.is_superuser())
|
||||||
|
return BAN::Error::from_errno(EPERM);
|
||||||
|
|
||||||
auto absolute_path = TRY(absolute_path_of(path));
|
auto absolute_path = TRY(absolute_path_of(path));
|
||||||
TRY(Input::KeyboardLayout::get().load_from_file(absolute_path));
|
TRY(Input::KeyboardLayout::get().load_from_file(absolute_path));
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -12,6 +12,7 @@ set(USERSPACE_PROJECTS
|
||||||
id
|
id
|
||||||
init
|
init
|
||||||
image
|
image
|
||||||
|
loadkeys
|
||||||
ls
|
ls
|
||||||
meminfo
|
meminfo
|
||||||
mkdir
|
mkdir
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
cmake_minimum_required(VERSION 3.26)
|
||||||
|
|
||||||
|
project(loadkeys CXX)
|
||||||
|
|
||||||
|
set(SOURCES
|
||||||
|
main.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_executable(loadkeys ${SOURCES})
|
||||||
|
target_compile_options(loadkeys PUBLIC -O2 -g)
|
||||||
|
target_link_libraries(loadkeys PUBLIC libc)
|
||||||
|
|
||||||
|
add_custom_target(loadkeys-install
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/loadkeys ${BANAN_BIN}/
|
||||||
|
DEPENDS loadkeys
|
||||||
|
)
|
|
@ -0,0 +1,42 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/banan-os.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
int try_load_keymap(const char* path)
|
||||||
|
{
|
||||||
|
if (load_keymap(path) == -1)
|
||||||
|
{
|
||||||
|
perror("load_keymap");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
if (argc != 2)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "usage: %s KEYMAP\n", argv[0]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct stat st;
|
||||||
|
if (stat(argv[1], &st) == 0)
|
||||||
|
return try_load_keymap(argv[1]);
|
||||||
|
|
||||||
|
char buffer[128];
|
||||||
|
strcpy(buffer, "/usr/share/keymaps/");
|
||||||
|
strcat(buffer, argv[1]);
|
||||||
|
|
||||||
|
if (stat(buffer, &st) == 0)
|
||||||
|
return try_load_keymap(buffer);
|
||||||
|
|
||||||
|
strcat(buffer, ".keymap");
|
||||||
|
|
||||||
|
if (stat(buffer, &st) == 0)
|
||||||
|
return try_load_keymap(buffer);
|
||||||
|
|
||||||
|
fprintf(stderr, "Keymap '%s' not found\n", argv[1]);
|
||||||
|
return 1;
|
||||||
|
}
|
Loading…
Reference in New Issue