diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt index f309e3e6..ff1e593c 100644 --- a/kernel/CMakeLists.txt +++ b/kernel/CMakeLists.txt @@ -31,7 +31,6 @@ set(SOURCES src/sys/file.cpp src/sys/id.cpp src/sys/mkdir.cpp - src/sys/mknod.cpp src/sys/waitpid.cpp src/sys/getdents.cpp src/sys/stat.cpp diff --git a/kernel/src/sys/mknod.cpp b/kernel/src/sys/mknod.cpp deleted file mode 100644 index 20f9a464..00000000 --- a/kernel/src/sys/mknod.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include "Log.h" -#include "fs/VFS.h" -#include "memory/MemoryManager.h" -#include "sys/Syscall.h" -#include "thread/Scheduler.h" -#include -#include - -Result sys_mknod(Registers*, SyscallArgs args) -{ - auto path = TRY(MemoryManager::strdup_from_user(args[0])); - mode_t mode = (mode_t)args[1]; - dev_t dev = (dev_t)args[2]; - - Thread* current = Scheduler::current(); - - u32 maj = luna_dev_major(dev); - u32 min = luna_dev_minor(dev); - - auto parser = TRY(PathParser::create(path.chars())); - - auto dirname = TRY(parser.dirname()); - auto basename = TRY(parser.basename()); - - TRY(VFS::validate_filename(basename.view())); - - auto parent = TRY(VFS::resolve_path(dirname.chars(), current->auth, current->current_directory)); - if (!VFS::can_write(parent, current->auth)) return err(EACCES); - - auto inode = TRY(parent->fs()->create_device_inode(maj, min)); - TRY(parent->add_entry(inode, basename.chars())); - - TRY(inode->chmod(mode)); - - return 0; -} diff --git a/libc/include/sys/stat.h b/libc/include/sys/stat.h index 7de93387..a074401d 100644 --- a/libc/include/sys/stat.h +++ b/libc/include/sys/stat.h @@ -15,9 +15,6 @@ extern "C" /* Create a directory. */ int mkdir(const char* path, mode_t mode); - /* Create a special file. */ - int mknod(const char* path, mode_t mode, dev_t dev); - /* Change the mode bits of a file. */ int chmod(const char* path, mode_t mode); diff --git a/libc/src/sys/stat.cpp b/libc/src/sys/stat.cpp index 6cf4c737..06ddfecc 100644 --- a/libc/src/sys/stat.cpp +++ b/libc/src/sys/stat.cpp @@ -12,12 +12,6 @@ extern "C" __errno_return(rc, int); } - int mknod(const char* path, mode_t mode, dev_t dev) - { - long rc = syscall(SYS_mknod, path, mode, dev); - __errno_return(rc, int); - } - int chmod(const char* path, mode_t mode) { long rc = syscall(SYS_fchmodat, AT_FDCWD, path, mode, 0); diff --git a/libluna/include/luna/Syscall.h b/libluna/include/luna/Syscall.h index ad8c6333..763ed8e5 100644 --- a/libluna/include/luna/Syscall.h +++ b/libluna/include/luna/Syscall.h @@ -2,10 +2,10 @@ #define enumerate_syscalls(_e) \ _e(exit) _e(clock_gettime) _e(mmap) _e(munmap) _e(usleep) _e(openat) _e(close) _e(read) _e(getpid) _e(write) \ - _e(lseek) _e(mkdir) _e(execve) _e(mknod) _e(fork) _e(waitpid) _e(getppid) _e(fcntl) _e(getdents) _e(getuid) \ - _e(geteuid) _e(getgid) _e(getegid) _e(setuid) _e(setgid) _e(seteuid) _e(setegid) _e(fchmodat) _e(fchownat) \ - _e(ioctl) _e(fstatat) _e(chdir) _e(getcwd) _e(unlinkat) _e(uname) _e(sethostname) _e(dup2) _e(pipe) \ - _e(mount) _e(umount) + _e(lseek) _e(mkdir) _e(execve) _e(fork) _e(waitpid) _e(getppid) _e(fcntl) _e(getdents) _e(getuid) _e(geteuid) \ + _e(getgid) _e(getegid) _e(setuid) _e(setgid) _e(seteuid) _e(setegid) _e(fchmodat) _e(fchownat) _e(ioctl) \ + _e(fstatat) _e(chdir) _e(getcwd) _e(unlinkat) _e(uname) _e(sethostname) _e(dup2) _e(pipe) _e(mount) \ + _e(umount) enum Syscalls {