OSDN Git Service

Implement accept4 system call.
authorThierry Reding <thierry.reding@avionic-design.de>
Wed, 11 May 2011 06:40:58 +0000 (08:40 +0200)
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Wed, 11 May 2011 08:04:20 +0000 (10:04 +0200)
Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
libc/inet/accept.c
libc/inet/socketcalls.c

index 0217a68..b0fd2b2 100644 (file)
@@ -5,4 +5,5 @@
  */
 
 #define L_accept
+#define L_accept4
 #include "socketcalls.c"
index 42a5a56..ff5fdaa 100644 (file)
@@ -31,6 +31,7 @@ extern int __socketcall(int call, unsigned long *args) attribute_hidden;
 #define SYS_GETSOCKOPT  15
 #define SYS_SENDMSG     16
 #define SYS_RECVMSG     17
+#define SYS_ACCEPT4     18
 #endif
 
 #ifdef __UCLIBC_HAS_THREADS_NATIVE__
@@ -560,3 +561,20 @@ int socketpair(int family, int type, int protocol, int sockvec[2])
 }
 #endif
 #endif
+
+#ifdef L_accept4
+#ifdef __NR_accept4
+_syscall4(int, accept4, int, sockfd, struct sockaddr *, addr, socklen_t *, addrlen, int, flags)
+#elif defined(__NR_socketcall)
+int accept4(int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags)
+{
+       unsigned long args[4];
+
+       args[0] = sockfd;
+       args[1] = (unsigned long) addr;
+       args[2] = (unsigned long) addrlen;
+       args[3] = flags;
+       return __socketcall(SYS_ACCEPT4, args);
+}
+#endif
+#endif