Ver código fonte

LibCore: Add ErrorOr wrapper for adjtime

mjz19910 3 anos atrás
pai
commit
a9fb34ca6f

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

@@ -2,6 +2,7 @@
  * Copyright (c) 2021-2022, Andreas Kling <kling@serenityos.org>
  * Copyright (c) 2021, Kenneth Myhra <kennethmyhra@gmail.com>
  * Copyright (c) 2021, Sam Atkins <atkinssj@serenityos.org>
+ * Copyright (c) 2022, Matthias Zimmerman <matthias291999@gmail.com>
  *
  * SPDX-License-Identifier: BSD-2-Clause
  */
@@ -15,6 +16,7 @@
 #include <sys/ioctl.h>
 #include <sys/mman.h>
 #include <sys/ptrace.h>
+#include <sys/time.h>
 #include <termios.h>
 #include <unistd.h>
 
@@ -741,6 +743,18 @@ ErrorOr<struct utsname> uname()
     return uts;
 }
 
+ErrorOr<void> adjtime(const struct timeval* delta, struct timeval* old_delta)
+{
+#ifdef __serenity__
+    int rc = syscall(SC_adjtime, delta, old_delta);
+    HANDLE_SYSCALL_RETURN_VALUE("adjtime"sv, rc, {});
+#else
+    if (::adjtime(delta, old_delta) < 0)
+        return Error::from_syscall("adjtime"sv, -errno);
+    return {};
+#endif
+}
+
 ErrorOr<int> socket(int domain, int type, int protocol)
 {
     auto fd = ::socket(domain, type, protocol);

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

@@ -18,6 +18,7 @@
 #include <sys/ioctl.h>
 #include <sys/socket.h>
 #include <sys/stat.h>
+#include <sys/time.h>
 #include <sys/utsname.h>
 #include <sys/wait.h>
 #include <termios.h>
@@ -112,6 +113,7 @@ ErrorOr<void> unlink(StringView path);
 ErrorOr<void> utime(StringView path, Optional<struct utimbuf>);
 ErrorOr<struct utsname> uname();
 ErrorOr<Array<int, 2>> pipe2(int flags);
+ErrorOr<void> adjtime(const struct timeval* delta, struct timeval* old_delta);
 
 ErrorOr<int> socket(int domain, int type, int protocol);
 ErrorOr<void> bind(int sockfd, struct sockaddr const*, socklen_t);