Kernel/LibC: Implement `fchdir`, cleanup `chdir` and `getcwd`
This commit is contained in:
parent
7edfae8583
commit
6f9dc2a9b8
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
{
|
||||
|
|
|
@ -32,8 +32,9 @@ __BEGIN_DECLS
|
|||
O(SYS_GET_GID, getgid) \
|
||||
O(SYS_GET_EUID, geteuid) \
|
||||
O(SYS_GET_EGID, getegid) \
|
||||
O(SYS_GET_PWD, getpwd) \
|
||||
O(SYS_SET_PWD, setpwd) \
|
||||
O(SYS_GETCWD, getcwd) \
|
||||
O(SYS_CHDIR, chdir) \
|
||||
O(SYS_FCHDIR, fchdir) \
|
||||
O(SYS_CLOCK_GETTIME, clock_gettime) \
|
||||
O(SYS_PIPE, pipe) \
|
||||
O(SYS_DUP2, dup2) \
|
||||
|
|
|
@ -426,7 +426,7 @@ char* getcwd(char* buf, size_t size)
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
if (syscall(SYS_GET_PWD, buf, size) == 0)
|
||||
if (syscall(SYS_GETCWD, buf, size) == 0)
|
||||
return nullptr;
|
||||
|
||||
return buf;
|
||||
|
@ -434,7 +434,12 @@ char* getcwd(char* buf, size_t size)
|
|||
|
||||
int chdir(const char* path)
|
||||
{
|
||||
return syscall(SYS_SET_PWD, path);
|
||||
return syscall(SYS_CHDIR, path);
|
||||
}
|
||||
|
||||
int fchdir(int fildes)
|
||||
{
|
||||
return syscall(SYS_FCHDIR, fildes);
|
||||
}
|
||||
|
||||
int chown(const char* path, uid_t owner, gid_t group)
|
||||
|
|
Loading…
Reference in New Issue