use namespace-safe __lseek for __stdio_seek instead of direct syscall
authorRich Felker <dalias@aerifal.cx>
Tue, 16 Jul 2019 22:31:33 +0000 (18:31 -0400)
committerRich Felker <dalias@aerifal.cx>
Tue, 16 Jul 2019 22:31:33 +0000 (18:31 -0400)
this probably saves a few bytes, avoids duplicating the clunky
lseek/_llseek syscall convention in two places, and sets the stage for
fixing broken seeks on x32 and mipsn32.

src/include/unistd.h
src/stdio/__stdio_seek.c
src/unistd/lseek.c

index 6deb1bcc16caae974ee5229abbd6ea3b940c55a7..1b4605c7c6a6d3461e293985797dfd95aa13a49a 100644 (file)
@@ -9,5 +9,6 @@ hidden int __dup3(int, int, int);
 hidden int __mkostemps(char *, int, int);
 hidden int __execvpe(const char *, char *const *, char *const *);
 hidden int __aio_close(int);
+hidden off_t __lseek(int, off_t, int);
 
 #endif
index 13e06a663eff8e4cb79cabf33c4ec08df20e570e..326ab9bce48ed38f5f56e059b9312efb0328acbe 100644 (file)
@@ -1,13 +1,7 @@
 #include "stdio_impl.h"
+#include <unistd.h>
 
 off_t __stdio_seek(FILE *f, off_t off, int whence)
 {
-       off_t ret;
-#ifdef SYS__llseek
-       if (syscall(SYS__llseek, f->fd, off>>32, off, &ret, whence)<0)
-               ret = -1;
-#else
-       ret = syscall(SYS_lseek, f->fd, off, whence);
-#endif
-       return ret;
+       return __lseek(f->fd, off, whence);
 }
index bf8cd8528e13b28dae03b771f2aa311555124bdf..b4984f3e9ef99ec081aa34c221a84269d7978339 100644 (file)
@@ -1,7 +1,7 @@
 #include <unistd.h>
 #include "syscall.h"
 
-off_t lseek(int fd, off_t offset, int whence)
+off_t __lseek(int fd, off_t offset, int whence)
 {
 #ifdef SYS__llseek
        off_t result;
@@ -11,4 +11,5 @@ off_t lseek(int fd, off_t offset, int whence)
 #endif
 }
 
-weak_alias(lseek, lseek64);
+weak_alias(__lseek, lseek);
+weak_alias(__lseek, lseek64);