this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add several remaining missing socket syscalls, fixed connect() on i386

+135 -1
+5
src/kernel/emulation/linux/CMakeLists.txt
··· 98 98 fcntl/open.c 99 99 fcntl/fcntl.c 100 100 network/socket.c 101 + network/socketpair.c 101 102 network/connect.c 102 103 network/recvmsg.c 103 104 network/sendmsg.c ··· 110 111 network/getsockopt.c 111 112 network/setsockopt.c 112 113 network/sendto.c 114 + network/bind.c 115 + network/listen.c 113 116 stat/fstat.c 114 117 stat/lstat.c 115 118 stat/stat.c ··· 187 190 set_source_files_properties(signal/duct_signals.c PROPERTIES COMPILE_FLAGS 188 191 "-I${DARLING_TOP_DIRECTORY}/platform-include -I${DARLING_TOP_DIRECTORY}/src/libc/include -nostdinc") 189 192 set_source_files_properties(network/socket.c PROPERTIES COMPILE_FLAGS 193 + "-I${DARLING_TOP_DIRECTORY}/platform-include -I${DARLING_TOP_DIRECTORY}/kernel-include") 194 + set_source_files_properties(network/socketpair.c PROPERTIES COMPILE_FLAGS 190 195 "-I${DARLING_TOP_DIRECTORY}/platform-include -I${DARLING_TOP_DIRECTORY}/kernel-include") 191 196 set_source_files_properties(network/duct.c PROPERTIES COMPILE_FLAGS 192 197 "-I${DARLING_TOP_DIRECTORY}/platform-include -I${DARLING_TOP_DIRECTORY}/kernel-include")
+34
src/kernel/emulation/linux/network/bind.c
··· 1 + #include "bind.h" 2 + #include "../base.h" 3 + #include "../errno.h" 4 + #include <asm/unistd.h> 5 + #include "../../../../../platform-include/sys/errno.h" 6 + #include "duct.h" 7 + 8 + extern void *memcpy(void *dest, const void *src, __SIZE_TYPE__ n); 9 + 10 + long sys_bind(int fd, const void* name, int socklen) 11 + { 12 + int ret; 13 + struct sockaddr_fixup* fixed; 14 + 15 + if (socklen > 512) 16 + return -EINVAL; 17 + 18 + fixed = __builtin_alloca(socklen); 19 + memcpy(fixed, name, socklen); 20 + 21 + fixed->linux_family = sfamily_bsd_to_linux(fixed->bsd_family); 22 + 23 + #ifdef __NR_socketcall 24 + ret = LINUX_SYSCALL(__NR_socketcall, LINUX_SYS_BIND, ((long[6]) { fd, fixed, socklen })); 25 + #else 26 + ret = LINUX_SYSCALL(__NR_bind, fd, fixed, socklen); 27 + #endif 28 + 29 + if (ret < 0) 30 + ret = errno_linux_to_bsd(ret); 31 + 32 + return ret; 33 + } 34 +
+9
src/kernel/emulation/linux/network/bind.h
··· 1 + #ifndef LINUX_BIND_H 2 + #define LINUX_BIND_H 3 + 4 + long sys_bind(int fd, const void* name, int socklen); 5 + 6 + #define LINUX_SYS_BIND 2 7 + 8 + #endif 9 +
+1 -1
src/kernel/emulation/linux/network/connect.h
··· 4 4 long sys_connect(int fd, const void* name, int socklen); 5 5 long sys_connect_nocancel(int fd, const void* name, int socklen); 6 6 7 - #define LINUX_SYS_CONNECT 2 7 + #define LINUX_SYS_CONNECT 3 8 8 9 9 #endif 10 10
+22
src/kernel/emulation/linux/network/listen.c
··· 1 + #include "listen.h" 2 + #include "../base.h" 3 + #include "../errno.h" 4 + #include <asm/unistd.h> 5 + 6 + long sys_listen(int fd, int backlog) 7 + { 8 + int ret; 9 + 10 + #ifdef __NR_socketcall 11 + ret = LINUX_SYSCALL(__NR_socketcall, LINUX_SYS_LISTEN, 12 + ((long[6]) { fd, backlog })); 13 + #else 14 + ret = LINUX_SYSCALL(__NR_listen, fd, backlog); 15 + #endif 16 + 17 + if (ret < 0) 18 + ret = errno_linux_to_bsd(ret); 19 + 20 + return ret; 21 + } 22 +
+9
src/kernel/emulation/linux/network/listen.h
··· 1 + #ifndef LINUX_LISTEN_H 2 + #define LINUX_LISTEN_H 3 + 4 + long sys_listen(int fd, int backlog); 5 + 6 + #define LINUX_SYS_LISTEN 4 7 + 8 + #endif 9 +
+40
src/kernel/emulation/linux/network/socketpair.c
··· 1 + #include "socketpair.h" 2 + #include "../base.h" 3 + #include "../errno.h" 4 + #include <asm/unistd.h> 5 + #include "../../../../../platform-include/sys/socket.h" 6 + #include "../../../../../platform-include/sys/errno.h" 7 + #include "duct.h" 8 + 9 + long sys_socketpair(int domain, int type, int protocol, int sv[2]) 10 + { 11 + int ret; 12 + int linux_domain; 13 + 14 + switch (domain) 15 + { 16 + case PF_LOCAL: 17 + linux_domain = LINUX_PF_LOCAL; break; 18 + case PF_INET: 19 + linux_domain = LINUX_PF_INET; break; 20 + case PF_IPX: 21 + linux_domain = LINUX_PF_IPX; break; 22 + case PF_INET6: 23 + linux_domain = LINUX_PF_INET6; break; 24 + default: 25 + return -EINVAL; 26 + } 27 + 28 + #ifdef __NR_socketcall 29 + ret = LINUX_SYSCALL(__NR_socketcall, LINUX_SYS_SOCKETPAIR, 30 + ((long[6]) { linux_domain, type, protocol, sv })); 31 + #else 32 + ret = LINUX_SYSCALL(__NR_socketpair, linux_domain, type, protocol, sv); 33 + #endif 34 + 35 + if (ret < 0) 36 + ret = errno_linux_to_bsd(ret); 37 + 38 + return ret; 39 + } 40 +
+9
src/kernel/emulation/linux/network/socketpair.h
··· 1 + #ifndef LINUX_SOCKETPAIR_H 2 + #define LINUX_SOCKETPAIR_H 3 + 4 + long sys_socketpair(int domain, int type, int protocol, int sv[2]); 5 + 6 + #define LINUX_SYS_SOCKETPAIR 8 7 + 8 + #endif 9 +
+6
src/kernel/emulation/linux/syscalls.c
··· 89 89 #include "network/getsockopt.h" 90 90 #include "network/setsockopt.h" 91 91 #include "network/sendto.h" 92 + #include "network/bind.h" 93 + #include "network/listen.h" 94 + #include "network/socketpair.h" 92 95 #include "dirent/getdirentries.h" 93 96 #include "stat/fstat.h" 94 97 #include "stat/stat.h" ··· 200 203 [95] = sys_fsync, 201 204 [97] = sys_socket, 202 205 [98] = sys_connect, 206 + [104] = sys_bind, 203 207 [105] = sys_setsockopt, 208 + [106] = sys_listen, 204 209 [116] = sys_gettimeofday, 205 210 [117] = sys_getrusage, 206 211 [118] = sys_getsockopt, ··· 212 217 [132] = sys_mkfifo, 213 218 [133] = sys_sendto, 214 219 [134] = sys_shutdown, 220 + [135] = sys_socketpair, 215 221 [136] = sys_mkdir, 216 222 [137] = sys_rmdir, 217 223 [138] = sys_utimes,