Forráskód Böngészése

LibCore: Impliment ErrorOr wrapper for chdir

mjz19910 3 éve
szülő
commit
eacbbca4c4

+ 15 - 0
Userland/Libraries/LibCore/System.cpp

@@ -592,6 +592,21 @@ ErrorOr<void> mkdir(StringView path, mode_t mode)
 #endif
 }
 
+ErrorOr<void> chdir(StringView path)
+{
+    if (path.is_null())
+        return Error::from_errno(EFAULT);
+#ifdef __serenity__
+    int rc = syscall(SC_chdir, path.characters_without_null_termination(), path.length());
+    HANDLE_SYSCALL_RETURN_VALUE("chdir"sv, rc, {});
+#else
+    String path_string = path;
+    if (::chdir(path_string.characters()) < 0)
+        return Error::from_syscall("chdir"sv, -errno);
+    return {};
+#endif
+}
+
 ErrorOr<pid_t> fork()
 {
     pid_t pid = ::fork();

+ 1 - 0
Userland/Libraries/LibCore/System.h

@@ -93,6 +93,7 @@ ErrorOr<void> setpgid(pid_t pid, pid_t pgid);
 ErrorOr<bool> isatty(int fd);
 ErrorOr<void> symlink(StringView target, StringView link_path);
 ErrorOr<void> mkdir(StringView path, mode_t);
+ErrorOr<void> chdir(StringView path);
 ErrorOr<pid_t> fork();
 ErrorOr<int> mkstemp(Span<char> pattern);
 ErrorOr<void> fchmod(int fd, mode_t mode);