int sys_renameat(int old_fd, const char *old_path, int new_fd, const char *new_path) { int old_kfd = at_kfd(old_fd); int new_kfd = at_kfd(new_fd); if(old_kfd != -1 && new_kfd != -1) { size_t old_size = strlen(old_path)+1; size_t new_size = strlen(new_path)+1; return frontend_syscall(SYS_renameat, old_kfd, (uintptr_t)old_path, old_size, new_kfd, (uintptr_t)new_path, new_size, 0); } return -EBADF; }
long sys_linkat(int old_dirfd, const char* old_name, int new_dirfd, const char* new_name, int flags) { int old_kfd = at_kfd(old_dirfd); int new_kfd = at_kfd(new_dirfd); if (old_kfd != -1 && new_kfd != -1) { size_t old_size = strlen(old_name)+1; size_t new_size = strlen(new_name)+1; return frontend_syscall(SYS_linkat, old_kfd, (uintptr_t)old_name, old_size, new_kfd, (uintptr_t)new_name, new_size, flags); } return -EBADF; }
long sys_mkdirat(int dirfd, const char* name, int mode) { int kfd = at_kfd(dirfd); if (kfd != -1) { size_t name_size = strlen(name)+1; return frontend_syscall(SYS_mkdirat, kfd, (uintptr_t)name, name_size, mode, 0, 0, 0); } return -EBADF; }
long sys_unlinkat(int dirfd, const char* name, int flags) { int kfd = at_kfd(dirfd); if (kfd != -1) { size_t name_size = strlen(name)+1; return frontend_syscall(SYS_unlinkat, kfd, (uintptr_t)name, name_size, flags, 0, 0, 0); } return -EBADF; }
long sys_faccessat(int dirfd, const char *name, int mode) { int kfd = at_kfd(dirfd); if (kfd != -1) { size_t name_size = strlen(name)+1; return frontend_syscall(SYS_faccessat, kfd, va2pa(name), name_size, mode, 0, 0, 0); } return -EBADF; }
long sys_fstatat(int dirfd, const char* name, void* st, int flags) { int kfd = at_kfd(dirfd); if (kfd != -1) { struct frontend_stat buf; size_t name_size = strlen(name)+1; long ret = frontend_syscall(SYS_fstatat, kfd, (uintptr_t)name, name_size, (uintptr_t)&buf, flags, 0, 0); copy_stat(st, &buf); return ret; } return -EBADF; }
int sys_openat(int dirfd, const char* name, int flags, int mode) { int kfd = at_kfd(dirfd); if (kfd != -1) { file_t* file = file_openat(kfd, name, flags, mode); if (IS_ERR_VALUE(file)) return PTR_ERR(file); int fd = file_dup(file); if (fd < 0) { file_decref(file); return -ENOMEM; } return fd; } return -EBADF; }