mirror of
https://github.com/RGBCube/serenity
synced 2025-05-28 09:25:06 +00:00
Kernel: Pass a parameter struct to rename()
This commit is contained in:
parent
46830a0c32
commit
e380142853
4 changed files with 23 additions and 8 deletions
|
@ -3476,14 +3476,19 @@ int Process::sys$donate(int tid)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Process::sys$rename(const char* oldpath, const char* newpath)
|
int Process::sys$rename(const Syscall::SC_rename_params* user_params)
|
||||||
{
|
{
|
||||||
SmapDisabler disabler;
|
if (!validate_read_typed(user_params))
|
||||||
if (!validate_read_str(oldpath))
|
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
if (!validate_read_str(newpath))
|
Syscall::SC_rename_params params;
|
||||||
return -EFAULT;
|
copy_from_user(¶ms, user_params);
|
||||||
return VFS::the().rename(StringView(oldpath), StringView(newpath), current_directory());
|
auto old_path = get_syscall_path_argument(params.old_path.characters, params.old_path.length);
|
||||||
|
if (old_path.is_error())
|
||||||
|
return old_path.error();
|
||||||
|
auto new_path = get_syscall_path_argument(params.new_path.characters, params.new_path.length);
|
||||||
|
if (new_path.is_error())
|
||||||
|
return new_path.error();
|
||||||
|
return VFS::the().rename(old_path.value(), new_path.value(), current_directory());
|
||||||
}
|
}
|
||||||
|
|
||||||
int Process::sys$ftruncate(int fd, off_t length)
|
int Process::sys$ftruncate(int fd, off_t length)
|
||||||
|
|
|
@ -204,7 +204,7 @@ public:
|
||||||
int sys$detach_thread(int tid);
|
int sys$detach_thread(int tid);
|
||||||
int sys$set_thread_name(int tid, const char* buffer, int buffer_size);
|
int sys$set_thread_name(int tid, const char* buffer, int buffer_size);
|
||||||
int sys$get_thread_name(int tid, char* buffer, int buffer_size);
|
int sys$get_thread_name(int tid, char* buffer, int buffer_size);
|
||||||
int sys$rename(const char* oldpath, const char* newpath);
|
int sys$rename(const Syscall::SC_rename_params*);
|
||||||
int sys$systrace(pid_t);
|
int sys$systrace(pid_t);
|
||||||
int sys$mknod(const Syscall::SC_mknod_params*);
|
int sys$mknod(const Syscall::SC_mknod_params*);
|
||||||
int sys$create_shared_buffer(int, void** buffer);
|
int sys$create_shared_buffer(int, void** buffer);
|
||||||
|
|
|
@ -350,6 +350,11 @@ struct SC_symlink_params {
|
||||||
StringArgument linkpath;
|
StringArgument linkpath;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct SC_rename_params {
|
||||||
|
StringArgument old_path;
|
||||||
|
StringArgument new_path;
|
||||||
|
};
|
||||||
|
|
||||||
void initialize();
|
void initialize();
|
||||||
int sync();
|
int sync();
|
||||||
|
|
||||||
|
|
|
@ -510,7 +510,12 @@ int fclose(FILE* stream)
|
||||||
|
|
||||||
int rename(const char* oldpath, const char* newpath)
|
int rename(const char* oldpath, const char* newpath)
|
||||||
{
|
{
|
||||||
int rc = syscall(SC_rename, oldpath, newpath);
|
if (!oldpath || !newpath) {
|
||||||
|
errno = EFAULT;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
Syscall::SC_rename_params params { { oldpath, strlen(oldpath) }, { newpath, strlen(newpath) } };
|
||||||
|
int rc = syscall(SC_rename, ¶ms);
|
||||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue