cleanup socketcall syscall interface to ease porting to sane(r) archs
authorRich Felker <dalias@aerifal.cx>
Tue, 15 Feb 2011 09:40:40 +0000 (04:40 -0500)
committerRich Felker <dalias@aerifal.cx>
Tue, 15 Feb 2011 09:40:40 +0000 (04:40 -0500)
21 files changed:
arch/i386/bits/ioctl.h
arch/i386/syscall.h
src/network/accept.c
src/network/bind.c
src/network/connect.c
src/network/getpeername.c
src/network/getsockname.c
src/network/getsockopt.c
src/network/listen.c
src/network/recv.c
src/network/recvfrom.c
src/network/recvmsg.c
src/network/send.c
src/network/sendmsg.c
src/network/sendto.c
src/network/setsockopt.c
src/network/shutdown.c
src/network/sockatmark.c
src/network/socket.c
src/network/socketcall.h [deleted file]
src/network/socketpair.c

index 544bbdce602d77d778e5a13918e90b1e33a9362b..336c71c30272f84bdbfaff1f23c700d811ded351 100644 (file)
@@ -127,6 +127,13 @@ struct winsize {
 #define N_SYNC_PPP      14
 #define N_HCI           15
 
+#define FIOSETOWN       0x8901
+#define SIOCSPGRP       0x8902
+#define FIOGETOWN       0x8903
+#define SIOCGPGRP       0x8904
+#define SIOCATMARK      0x8905
+#define SIOCGSTAMP      0x8906
+
 #define SIOCADDRT       0x890B
 #define SIOCDELRT       0x890C
 #define SIOCRTMSG       0x890D
index 114aa6880f6aa7fe3199196cc35d203712e8ce08..fcdae241a4f37f627029590d0c87b87721ca72b9 100644 (file)
@@ -501,6 +501,27 @@ static inline long syscall6(long n, long a1, long a2, long a3, long a4, long a5,
 #define __NR_pread __NR_pread64
 #define __NR_pwrite __NR_pwrite64
 
+#define __SC_socket      1
+#define __SC_bind        2
+#define __SC_connect     3
+#define __SC_listen      4
+#define __SC_accept      5
+#define __SC_getsockname 6
+#define __SC_getpeername 7
+#define __SC_socketpair  8
+#define __SC_send        9
+#define __SC_recv        10
+#define __SC_sendto      11
+#define __SC_recvfrom    12
+#define __SC_shutdown    13
+#define __SC_setsockopt  14
+#define __SC_getsockopt  15
+#define __SC_sendmsg     16
+#define __SC_recvmsg     17
+
+
+#define socketcall(nm, a, b, c, d, e, f) syscall2(__NR_socketcall, __SC_##nm, \
+    (long)(long [6]){ (long)a, (long)b, (long)c, (long)d, (long)e, (long)f })
 
 
 #undef O_LARGEFILE
index 837040962c07da3416e2acc84c2ec2909ef5d4fe..46adff5ce9cd254672a424574a0059378aca1bcb 100644 (file)
@@ -1,14 +1,12 @@
 #include <sys/socket.h>
 #include "syscall.h"
-#include "socketcall.h"
 #include "libc.h"
 
 int accept(int fd, struct sockaddr *addr, socklen_t *len)
 {
-       unsigned long args[] = { fd, (unsigned long)addr, (unsigned long)len };
        int ret;
        CANCELPT_BEGIN;
-       ret = syscall2(__NR_socketcall, SYS_ACCEPT, (long)args);
+       ret = socketcall(accept, fd, addr, len, 0, 0, 0);
        CANCELPT_END;
        return ret;
 }
index 3bef382c934186513d0e7f5953808943d9378e30..07bb669aade2df3ae2fdf3e529c5cc3d97df93d9 100644 (file)
@@ -1,9 +1,7 @@
 #include <sys/socket.h>
 #include "syscall.h"
-#include "socketcall.h"
 
 int bind(int fd, const struct sockaddr *addr, socklen_t len)
 {
-       unsigned long args[] = { fd, (unsigned long)addr, len };
-       return syscall2(__NR_socketcall, SYS_BIND, (long)args);
+       return socketcall(bind, fd, addr, len, 0, 0, 0);
 }
index 6074122edae13526c183dc75f0fc0136aa22b094..29bffbcb639b9082f169e7cfc6212900c467c35d 100644 (file)
@@ -1,14 +1,12 @@
 #include <sys/socket.h>
 #include "syscall.h"
-#include "socketcall.h"
 #include "libc.h"
 
 int connect(int fd, const struct sockaddr *addr, socklen_t len)
 {
-       unsigned long args[] = { fd, (unsigned long)addr, len };
        int ret;
        CANCELPT_BEGIN;
-       ret = syscall2(__NR_socketcall, SYS_CONNECT, (long)args);
+       ret = socketcall(connect, fd, addr, len, 0, 0, 0);
        CANCELPT_END;
        return ret;
 }
index 7ecbe375dd2ba434bf72d199f0708e320f25e66f..22effdae022518c86a5d0c6d6d77ec2f22746b00 100644 (file)
@@ -1,9 +1,7 @@
 #include <sys/socket.h>
 #include "syscall.h"
-#include "socketcall.h"
 
 int getpeername(int fd, struct sockaddr *addr, socklen_t *len)
 {
-       unsigned long args[] = { fd, (unsigned long)addr, (unsigned long)len };
-       return syscall2(__NR_socketcall, SYS_GETPEERNAME, (long)args);
+       return socketcall(getpeername, fd, addr, len, 0, 0, 0);
 }
index 4b1002f8a81dc3a522b8c095c4ce8d3206d0c5bb..271e3b41d113b72bd66ba4b4a82002c68e9f43ad 100644 (file)
@@ -1,9 +1,7 @@
 #include <sys/socket.h>
 #include "syscall.h"
-#include "socketcall.h"
 
 int getsockname(int fd, struct sockaddr *addr, socklen_t *len)
 {
-       unsigned long args[] = { fd, (unsigned long)addr, (unsigned long)len };
-       return syscall2(__NR_socketcall, SYS_GETSOCKNAME, (long)args);
+       return socketcall(getsockname, fd, addr, len, 0, 0, 0);
 }
index 8c818863b58394ff2c41ddf22fb2c4b8a7314463..a9e0a72dbe5565628b581ca5916513b701b515f8 100644 (file)
@@ -1,13 +1,7 @@
 #include <sys/socket.h>
 #include "syscall.h"
-#include "socketcall.h"
 
 int getsockopt(int fd, int level, int optname, void *optval, socklen_t *optlen)
 {
-       unsigned long args[] = {
-               fd, level, optname,
-               (unsigned long)optval,
-               (unsigned long)optlen
-       };
-       return syscall2(__NR_socketcall, SYS_GETSOCKOPT, (long)args);
+       return socketcall(getsockopt, fd, level, optname, optval, optlen, 0);
 }
index 7c8c1a8a3c142ff579c68fe9e9de9aa987dba378..f84ad03b7a54c57a5fff6322573cafd054f889fa 100644 (file)
@@ -1,9 +1,7 @@
 #include <sys/socket.h>
 #include "syscall.h"
-#include "socketcall.h"
 
 int listen(int fd, int backlog)
 {
-       unsigned long args[] = { fd, backlog };
-       return syscall2(__NR_socketcall, SYS_LISTEN, (long)args);
+       return socketcall(listen, fd, backlog, 0, 0, 0, 0);
 }
index 521a4b19fa0617a5ee34eaaaf0dc5e16332a8b60..d04a54aa8924aa98b5b16e8b48a6308ccd1db489 100644 (file)
@@ -1,14 +1,8 @@
 #include <sys/socket.h>
 #include "syscall.h"
-#include "socketcall.h"
 #include "libc.h"
 
 ssize_t recv(int fd, void *buf, size_t len, int flags)
 {
-       unsigned long args[] = { fd, (unsigned long)buf, len, flags };
-       ssize_t r;
-       CANCELPT_BEGIN;
-       r = syscall2(__NR_socketcall, SYS_RECV, (long)args);
-       CANCELPT_END;
-       return r;
+       return recvfrom(fd, buf, len, flags, 0, 0);
 }
index df50114b93b2668a55cb5818ea7154d09de1402c..d5222932efff480e5644c3377bfd9ffe34d378ce 100644 (file)
@@ -1,17 +1,12 @@
 #include <sys/socket.h>
 #include "syscall.h"
-#include "socketcall.h"
 #include "libc.h"
 
 ssize_t recvfrom(int fd, void *buf, size_t len, int flags, struct sockaddr *addr, socklen_t *alen)
 {
-       unsigned long args[] = {
-               fd, (unsigned long)buf, len, flags,
-               (unsigned long)addr, (unsigned long)alen
-       };
        ssize_t r;
        CANCELPT_BEGIN;
-       r = syscall2(__NR_socketcall, SYS_RECVFROM, (long)args);
+       r = socketcall(recvfrom, fd, buf, len, flags, addr, alen);
        CANCELPT_END;
        return r;
 }
index ead16f9c117fcc69a3bbca19f3bc4664e6526ac0..edc5f2417d34ac13167d54ca9ca18bee2b81d18f 100644 (file)
@@ -1,14 +1,12 @@
 #include <sys/socket.h>
 #include "syscall.h"
-#include "socketcall.h"
 #include "libc.h"
 
 ssize_t recvmsg(int fd, struct msghdr *msg, int flags)
 {
-       unsigned long args[] = { fd, (unsigned long)msg, flags };
        ssize_t r;
        CANCELPT_BEGIN;
-       r = syscall2(__NR_socketcall, SYS_RECVMSG, (long)args);
+       r = socketcall(recvmsg, fd, msg, flags, 0, 0, 0);
        CANCELPT_END;
        return r;
 }
index d72fb03c01bf4e79204fec6bc1e1fa90134c1007..b6ec310124523cfee7e8a11f92c3cac678d88749 100644 (file)
@@ -1,14 +1,8 @@
 #include <sys/socket.h>
 #include "syscall.h"
-#include "socketcall.h"
 #include "libc.h"
 
 ssize_t send(int fd, const void *buf, size_t len, int flags)
 {
-       unsigned long args[] = { fd, (unsigned long)buf, len, flags };
-       ssize_t r;
-       CANCELPT_BEGIN;
-       r = syscall2(__NR_socketcall, SYS_SEND, (long)args);
-       CANCELPT_END;
-       return r;
+       return sendto(fd, buf, len, flags, 0, 0);
 }
index ea2fe48206d810183f2633bb9fcf3ef671393c93..5d1123f0fff8a5fd463b389e9e124eac9fc64b9b 100644 (file)
@@ -1,14 +1,12 @@
 #include <sys/socket.h>
 #include "syscall.h"
-#include "socketcall.h"
 #include "libc.h"
 
 ssize_t sendmsg(int fd, const struct msghdr *msg, int flags)
 {
-       unsigned long args[] = { fd, (unsigned long)msg, flags };
        ssize_t r;
        CANCELPT_BEGIN;
-       r = syscall2(__NR_socketcall, SYS_SENDMSG, (long)args);
+       r = socketcall(sendmsg, fd, msg, flags, 0, 0, 0);
        CANCELPT_END;
        return r;
 }
index 5d224b0b14fa9048be6a0456860f54b4bdd9bc59..1cfc621d2796c64215a8d086bbbab7145262260c 100644 (file)
@@ -1,17 +1,12 @@
 #include <sys/socket.h>
 #include "syscall.h"
-#include "socketcall.h"
 #include "libc.h"
 
 ssize_t sendto(int fd, const void *buf, size_t len, int flags, const struct sockaddr *addr, socklen_t alen)
 {
-       unsigned long args[] = {
-               fd, (unsigned long)buf, len, flags,
-               (unsigned long)addr, alen
-       };
        ssize_t r;
        CANCELPT_BEGIN;
-       r = syscall2(__NR_socketcall, SYS_SENDTO, (long)args);
+       r = socketcall(sendto, fd, buf, len, flags, addr, alen);
        CANCELPT_END;
        return r;
 }
index b50303b86ac52032e13f38b901ba07a62a08bab0..c960c9ca7de97595042e382ed724e1aa6f0d3e2a 100644 (file)
@@ -1,9 +1,7 @@
 #include <sys/socket.h>
 #include "syscall.h"
-#include "socketcall.h"
 
 int setsockopt(int fd, int level, int optname, const void *optval, socklen_t optlen)
 {
-       unsigned long args[] = { fd, level, optname, (unsigned long)optval, optlen };
-       return syscall2(__NR_socketcall, SYS_SETSOCKOPT, (long)args);
+       return socketcall(setsockopt, fd, level, optname, optval, optlen, 0);
 }
index 91950c8a8ff0be4a582683d346cfce4467c66058..10ca21aa3cbeaaa95f4ce7f24aecdb64f2bd924d 100644 (file)
@@ -1,9 +1,7 @@
 #include <sys/socket.h>
 #include "syscall.h"
-#include "socketcall.h"
 
 int shutdown(int fd, int how)
 {
-       unsigned long args[] = { fd, how };
-       return syscall2(__NR_socketcall, SYS_SHUTDOWN, (long)args);
+       return socketcall(shutdown, fd, how, 0, 0, 0, 0);
 }
index 5328a8556f35977c7bb0f2f17dcc95940ba4cb29..f474551aafe44b15eb90fd19b37fef5696d6a3a1 100644 (file)
@@ -1,6 +1,5 @@
 #include <sys/socket.h>
 #include <sys/ioctl.h>
-#include "socketcall.h"
 
 int sockatmark(int s)
 {
index afaeb411bab866ff4a9ceea00001c210d0e42c0a..4f1e86dbf16f9d0e124137eb3623baa5057af281 100644 (file)
@@ -1,9 +1,7 @@
 #include <sys/socket.h>
 #include "syscall.h"
-#include "socketcall.h"
 
 int socket(int domain, int type, int protocol)
 {
-       unsigned long args[] = { domain, type, protocol };
-       return syscall2(__NR_socketcall, SYS_SOCKET, (long)args);
+       return socketcall(socket, domain, type, protocol, 0, 0, 0);
 }
diff --git a/src/network/socketcall.h b/src/network/socketcall.h
deleted file mode 100644 (file)
index 9ae9858..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-#define SYS_SOCKET      1
-#define SYS_BIND        2
-#define SYS_CONNECT     3
-#define SYS_LISTEN      4
-#define SYS_ACCEPT      5
-#define SYS_GETSOCKNAME 6
-#define SYS_GETPEERNAME 7
-#define SYS_SOCKETPAIR  8
-#define SYS_SEND        9
-#define SYS_RECV        10
-#define SYS_SENDTO      11
-#define SYS_RECVFROM    12
-#define SYS_SHUTDOWN    13
-#define SYS_SETSOCKOPT  14
-#define SYS_GETSOCKOPT  15
-#define SYS_SENDMSG     16
-#define SYS_RECVMSG     17
-
-#define FIOSETOWN       0x8901
-#define SIOCSPGRP       0x8902
-#define FIOGETOWN       0x8903
-#define SIOCGPGRP       0x8904
-#define SIOCATMARK      0x8905
-#define SIOCGSTAMP      0x8906
index 65a47fd974732e1ef536d0181fd195662c1dc6fb..b15f8467c4f27b35a0496916fdd347345b2e01f9 100644 (file)
@@ -1,9 +1,7 @@
 #include <sys/socket.h>
 #include "syscall.h"
-#include "socketcall.h"
 
 int socketpair(int domain, int type, int protocol, int fd[2])
 {
-       unsigned long args[] = { domain, type, protocol, (unsigned long)fd };
-       return syscall2(__NR_socketcall, SYS_SOCKETPAIR, (long)args);
+       return socketcall(socketpair, domain, type, protocol, fd, 0, 0);
 }