diff --git a/Kernel/Process.h b/Kernel/Process.h index b02cc80e24..f1df0d10d8 100644 --- a/Kernel/Process.h +++ b/Kernel/Process.h @@ -230,8 +230,8 @@ public: int sys$select(const Syscall::SC_select_params*); int sys$poll(const Syscall::SC_poll_params*); ssize_t sys$get_dir_entries(int fd, void*, ssize_t); - int sys$getcwd(char*, ssize_t); - int sys$chdir(const char*, size_t); + int sys$getcwd(Userspace, ssize_t); + int sys$chdir(Userspace, size_t); int sys$fchdir(int fd); int sys$sleep(unsigned seconds); int sys$usleep(useconds_t usec); diff --git a/Kernel/StdLib.h b/Kernel/StdLib.h index 3095557004..983e6ab8a2 100644 --- a/Kernel/StdLib.h +++ b/Kernel/StdLib.h @@ -83,3 +83,15 @@ inline void copy_to_user(Userspace dest, const T* src) { copy_to_user((T*)dest.ptr(), src, sizeof(T)); } + +template +inline void copy_to_user(Userspace dest, const void* src, size_t size) +{ + copy_to_user((void*)dest.ptr(), src, size); +} + +template +inline void copy_from_user(void* dest, Userspace src, size_t size) +{ + copy_from_user(dest, (const void*)src.ptr(), size); +} diff --git a/Kernel/Syscalls/chdir.cpp b/Kernel/Syscalls/chdir.cpp index b815ba8491..68437ab0a9 100644 --- a/Kernel/Syscalls/chdir.cpp +++ b/Kernel/Syscalls/chdir.cpp @@ -31,7 +31,7 @@ namespace Kernel { -int Process::sys$chdir(const char* user_path, size_t path_length) +int Process::sys$chdir(Userspace user_path, size_t path_length) { REQUIRE_PROMISE(rpath); auto path = get_syscall_path_argument(user_path, path_length); @@ -61,7 +61,7 @@ int Process::sys$fchdir(int fd) return 0; } -int Process::sys$getcwd(char* buffer, ssize_t size) +int Process::sys$getcwd(Userspace buffer, ssize_t size) { REQUIRE_PROMISE(rpath); if (size < 0)