Prechádzať zdrojové kódy

LibCore: Add syscall wrapper for chmod()

Kenneth Myhra 3 rokov pred
rodič
commit
0d76d15f9d

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

@@ -275,4 +275,20 @@ ErrorOr<void> tcsetattr(int fd, int optional_actions, struct termios const& ios)
     return {};
 }
 
+ErrorOr<void> chmod(StringView pathname, mode_t mode)
+{
+    if (!pathname.characters_without_null_termination())
+        return Error::from_syscall("chmod"sv, -EFAULT);
+
+#ifdef __serenity__
+    int rc = syscall(SC_chmod, pathname.characters_without_null_termination(), pathname.length(), mode);
+    HANDLE_SYSCALL_RETURN_VALUE("chmod"sv, rc, {});
+#else
+    String path = pathname;
+    if (::chmod(path.characters(), mode) < 0)
+        return Error::from_syscall("chmod"sv, -errno);
+    return {};
+#endif
+}
+
 }

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

@@ -41,5 +41,6 @@ ErrorOr<String> gethostname();
 ErrorOr<void> ioctl(int fd, unsigned request, ...);
 ErrorOr<struct termios> tcgetattr(int fd);
 ErrorOr<void> tcsetattr(int fd, int optional_actions, struct termios const&);
+ErrorOr<void> chmod(StringView pathname, mode_t mode);
 
 }