summaryrefslogtreecommitdiffstats
path: root/libc-top-half/musl/src/unistd/lseek.c
diff options
context:
space:
mode:
Diffstat (limited to 'libc-top-half/musl/src/unistd/lseek.c')
-rw-r--r--libc-top-half/musl/src/unistd/lseek.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/libc-top-half/musl/src/unistd/lseek.c b/libc-top-half/musl/src/unistd/lseek.c
new file mode 100644
index 0000000..48a638a
--- /dev/null
+++ b/libc-top-half/musl/src/unistd/lseek.c
@@ -0,0 +1,23 @@
+#include <unistd.h>
+#include "syscall.h"
+
+off_t __lseek(int fd, off_t offset, int whence)
+{
+#ifdef SYS__llseek
+ off_t result;
+#ifdef __wasilibc_unmodified_upstream // WASI has no syscall
+ return syscall(SYS__llseek, fd, offset>>32, offset, &result, whence) ? -1 : result;
+#else
+ return llseek(fd, offset>>32, offset, &result, whence) ? -1 : result;
+#endif
+#else
+#ifdef __wasilibc_unmodified_upstream // WASI has no syscall
+ return syscall(SYS_lseek, fd, offset, whence);
+#else
+ return lseek(fd, offset, whence);
+#endif
+#endif
+}
+
+weak_alias(__lseek, lseek);
+weak_alias(__lseek, lseek64);