Kernel/LibC: Implement fchdir, cleanup chdir and getcwd

This commit is contained in:
2025-04-19 21:28:31 +03:00
parent 7edfae8583
commit 6f9dc2a9b8
4 changed files with 36 additions and 17 deletions

View File

@@ -72,8 +72,9 @@ namespace Kernel
BAN::ErrorOr<long> sys_nanosleep(const timespec* rqtp, timespec* rmtp);
BAN::ErrorOr<long> sys_setitimer(int which, const itimerval* value, itimerval* ovalue);
BAN::ErrorOr<long> sys_setpwd(const char* path);
BAN::ErrorOr<long> sys_getpwd(char* buffer, size_t size);
BAN::ErrorOr<long> sys_getcwd(char* buffer, size_t size);
BAN::ErrorOr<long> sys_chdir(const char* path);
BAN::ErrorOr<long> sys_fchdir(int fildes);
BAN::ErrorOr<long> sys_setuid(uid_t);
BAN::ErrorOr<long> sys_setgid(gid_t);

View File

@@ -1648,17 +1648,7 @@ namespace Kernel
return TRY(m_open_file_descriptors.read_dir_entries(fd, list, list_len));
}
BAN::ErrorOr<long> Process::sys_setpwd(const char* path)
{
LockGuard _(m_process_lock);
auto file = TRY(find_file(AT_FDCWD, path, O_SEARCH));
m_working_directory = BAN::move(file);
return 0;
}
BAN::ErrorOr<long> Process::sys_getpwd(char* buffer, size_t size)
BAN::ErrorOr<long> Process::sys_getcwd(char* buffer, size_t size)
{
LockGuard _(m_process_lock);
@@ -1673,6 +1663,28 @@ namespace Kernel
return (long)buffer;
}
BAN::ErrorOr<long> Process::sys_chdir(const char* path)
{
LockGuard _(m_process_lock);
TRY(validate_string_access(path));
auto file = TRY(find_file(AT_FDCWD, path, O_SEARCH));
m_working_directory = BAN::move(file);
return 0;
}
BAN::ErrorOr<long> Process::sys_fchdir(int fildes)
{
LockGuard _(m_process_lock);
auto file = TRY(m_open_file_descriptors.file_of(fildes));
m_working_directory = BAN::move(file);
return 0;
}
BAN::ErrorOr<long> Process::sys_mmap(const sys_mmap_t* args)
{
{