summaryrefslogtreecommitdiff
path: root/libc/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'libc/sysdeps')
-rw-r--r--libc/sysdeps/linux/common/syscalls.c77
1 files changed, 37 insertions, 40 deletions
diff --git a/libc/sysdeps/linux/common/syscalls.c b/libc/sysdeps/linux/common/syscalls.c
index b3498f406..0f0da975d 100644
--- a/libc/sysdeps/linux/common/syscalls.c
+++ b/libc/sysdeps/linux/common/syscalls.c
@@ -198,6 +198,10 @@ _syscall3(int, lchown, const char *, path, uid_t, owner, gid_t, group);
#define __NR___libc_lseek __NR_lseek
_syscall3(__off_t, __libc_lseek, int, fildes, __off_t, offset, int, whence);
weak_alias(__libc_lseek, lseek)
+#ifndef __NR__llseek
+weak_alias(__libc_lseek, llseek)
+weak_alias(__libc_lseek, lseek64)
+#endif
#endif
//#define __NR_getpid 20
@@ -309,15 +313,16 @@ unsigned int alarm (unsigned int seconds)
#ifdef __NR_pause
#define __NR___libc_pause __NR_pause
_syscall0(int, __libc_pause);
+weak_alias(__libc_pause, pause)
#else
#include <signal.h>
int __libc_pause (void)
{
return(__sigpause(sigblock(0), 0));
}
-#endif
weak_alias(__libc_pause, pause)
#endif
+#endif
//#define __NR_utime 30
#ifdef L_utime
@@ -350,6 +355,8 @@ int utime(const char *file, const struct utimbuf *times)
#ifdef __NR_utimes
_syscall2(int, utimes, const char *, file, const struct timeval *, tvp);
#else
+#include <stdlib.h>
+#include <sys/time.h>
int utimes (const char *file, const struct timeval tvp[2])
{
struct utimbuf buf, *times;
@@ -782,6 +789,16 @@ _syscall2(int, setgroups, size_t, size, const gid_t *, list);
#endif
//#define __NR_select 82
+#ifdef L_select
+//Used as a fallback if _newselect isn't available...
+#ifndef _NR__newselect
+#include <unistd.h>
+extern int select(int n, fd_set *readfds, fd_set *writefds,
+ fd_set *exceptfds, struct timeval *timeout);
+_syscall5(int, select, int, n, fd_set *, readfds, fd_set *, writefds,
+ fd_set *, exceptfds, struct timeval *, timeout);
+#endif
+#endif
//#define __NR_symlink 83
#ifdef L_symlink
@@ -976,6 +993,10 @@ int stat(const char *file_name, struct libc_stat *buf)
{
return(__xstat(0, file_name, buf));
}
+#if ! defined __NR_stat64 && defined __UCLIBC_HAVE_LFS__
+weak_alias(stat, stat64);
+weak_alias(__xstat, __xstat64);
+#endif
#endif
//#define __NR_lstat 107
@@ -1001,6 +1022,10 @@ int lstat(const char *file_name, struct libc_stat *buf)
{
return(__lxstat(0, file_name, buf));
}
+#if ! defined __NR_lstat64 && defined __UCLIBC_HAVE_LFS__
+weak_alias(lstat, lstat64);
+weak_alias(__lxstat, __lxstat64);
+#endif
#endif
//#define __NR_fstat 108
@@ -1026,6 +1051,10 @@ int fstat(int filedes, struct libc_stat *buf)
{
return(__fxstat(0, filedes, buf));
}
+#if ! defined __NR_fstat64 && defined __UCLIBC_HAVE_LFS__
+weak_alias(fstat, fstat64);
+weak_alias(__fxstat, __fxstat64);
+#endif
#endif
//#define __NR_olduname 109
@@ -1212,7 +1241,7 @@ _syscall1(int, setfsgid, gid_t, gid);
//#define __NR__llseek 140
#ifdef L__llseek
#ifdef __UCLIBC_HAVE_LFS__
-#ifdef _NR_llseek
+#ifdef __NR__llseek
extern int _llseek(int fd, __off_t offset_hi, __off_t offset_lo,
__loff_t *result, int whence);
@@ -1231,10 +1260,6 @@ __loff_t __libc_lseek64(int fd, __loff_t offset, int whence)
}
weak_alias(__libc_lseek64, llseek);
weak_alias(__libc_lseek64, lseek64);
-#else
-extern __off_t __libc_lseek(int fildes, __off_t offset, int whence);
-weak_alias(__libc_lseek, llseek);
-weak_alias(__libc_lseek, lseek64);
#endif
#endif
#endif
@@ -1247,19 +1272,15 @@ _syscall3(int, getdents, int, fd, char *, dirp, size_t, count);
#endif
//#define __NR__newselect 142
-#if defined L__newselect || defined L_select
-#include <unistd.h>
+#ifdef L__newselect
+//Used in preference to select when available...
#ifdef _NR__newselect
+#include <unistd.h>
extern int _newselect(int n, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);
_syscall5(int, _newselect, int, n, fd_set *, readfds, fd_set *, writefds,
fd_set *, exceptfds, struct timeval *, timeout);
weak_alias(_newselect, select);
-#else
-extern int select(int n, fd_set *readfds, fd_set *writefds,
- fd_set *exceptfds, struct timeval *timeout);
-_syscall5(int, select, int, n, fd_set *, readfds, fd_set *, writefds,
- fd_set *, exceptfds, struct timeval *, timeout);
#endif
#endif
@@ -1632,9 +1653,8 @@ int getrlimit (__rlimit_resource_t resource, struct rlimit *rlimits)
//#define __NR_stat64 195
#ifdef L___stat64
-#ifdef __UCLIBC_HAVE_LFS__
+#if defined __NR_stat64 && defined __UCLIBC_HAVE_LFS__
#include <unistd.h>
-#ifdef __NR_stat64
#include "statfix64.h"
#define __NR___stat64 __NR_stat64
extern int __stat64(const char *file_name, struct kernel_stat64 *buf);
@@ -1655,21 +1675,13 @@ int stat64(const char *file_name, struct libc_stat64 *buf)
{
return(__xstat64(0, file_name, buf));
}
-#else
-struct stat;
-extern int stat(const char *file_name, struct stat *buf);
-extern int __xstat(int version, const char * file_name, struct stat *cstat);
-weak_alias(stat, stat64);
-weak_alias(__xstat, __xstat64);
-#endif
#endif /* __UCLIBC_HAVE_LFS__ */
#endif
//#define __NR_lstat64 196
#ifdef L___lstat64
-#ifdef __UCLIBC_HAVE_LFS__
+#if defined __NR_lstat64 && defined __UCLIBC_HAVE_LFS__
#include <unistd.h>
-#ifdef __NR_lstat64
#include "statfix64.h"
#define __NR___lstat64 __NR_lstat64
extern int __lstat64(const char *file_name, struct kernel_stat64 *buf);
@@ -1690,21 +1702,13 @@ int lstat64(const char *file_name, struct libc_stat64 *buf)
{
return(__lxstat64(0, file_name, buf));
}
-#else
-struct stat;
-extern int lstat(const char *file_name, struct stat *buf);
-extern int __lxstat(int version, const char * file_name, struct stat * cstat);
-weak_alias(lstat, lstat64);
-weak_alias(__lxstat, __lxstat64);
-#endif
#endif /* __UCLIBC_HAVE_LFS__ */
#endif
//#define __NR_fstat64 197
#ifdef L___fstat64
-#ifdef __UCLIBC_HAVE_LFS__
+#if defined __NR_fstat64 && defined __UCLIBC_HAVE_LFS__
#include <unistd.h>
-#ifdef __NR_fstat64
#include "statfix64.h"
#define __NR___fstat64 __NR_fstat64
extern int __fstat64(int filedes, struct kernel_stat64 *buf);
@@ -1725,13 +1729,6 @@ int fstat64(int filedes, struct libc_stat64 *buf)
{
return(__fxstat64(0, filedes, buf));
}
-#else
-struct stat;
-extern int fstat(int filedes, struct stat *buf);
-extern int __fxstat(int version, int fd, struct stat * cstat);
-weak_alias(fstat, fstat64);
-weak_alias(__fxstat, __fxstat64);
-#endif
#endif /* __UCLIBC_HAVE_LFS__ */
#endif