diff --git a/kernel/include/sortix/syscall.h b/kernel/include/sortix/syscall.h index 8e418c15..401c33ec 100644 --- a/kernel/include/sortix/syscall.h +++ b/kernel/include/sortix/syscall.h @@ -171,6 +171,7 @@ #define SYSCALL_TCSETBLOB 143 #define SYSCALL_GETPEERNAME 144 #define SYSCALL_GETSOCKNAME 145 -#define SYSCALL_MAX_NUM 146 /* index of highest constant + 1 */ +#define SYSCALL_SHUTDOWN 146 +#define SYSCALL_MAX_NUM 147 /* index of highest constant + 1 */ #endif diff --git a/kernel/io.cpp b/kernel/io.cpp index c4f2ede2..fff7efdc 100644 --- a/kernel/io.cpp +++ b/kernel/io.cpp @@ -1080,6 +1080,13 @@ static int sys_getsockname(int fd, struct sockaddr* addr, socklen_t* addrsize) return errno = ENOSYS, -1; } +static int sys_shutdown(int fd, int how) +{ + (void) fd; + (void) how; + return errno = ENOSYS, -1; +} + void Init() { Syscall::Register(SYSCALL_ACCEPT4, (void*) sys_accept4); @@ -1133,6 +1140,7 @@ void Init() Syscall::Register(SYSCALL_SEND, (void*) sys_send); Syscall::Register(SYSCALL_SETSOCKOPT, (void*) sys_setsockopt); Syscall::Register(SYSCALL_SETTERMMODE, (void*) sys_settermmode); + Syscall::Register(SYSCALL_SHUTDOWN, (void*) sys_shutdown); Syscall::Register(SYSCALL_SYMLINKAT, (void*) sys_symlinkat); Syscall::Register(SYSCALL_TCGETBLOB, (void*) sys_tcgetblob); Syscall::Register(SYSCALL_TCGETPGRP, (void*) sys_tcgetpgrp); diff --git a/libc/include/sys/socket.h b/libc/include/sys/socket.h index a6357dba..b257f611 100644 --- a/libc/include/sys/socket.h +++ b/libc/include/sys/socket.h @@ -156,10 +156,9 @@ struct linger #define PF_LOCAL PF_UNIX /* TODO: Nicely wrap this in an enum, as in glibc's header? */ -/* TODO: Should SHUT_RDWR = SHUT_RD | SHUT_WR? */ -#define SHUT_RD 0 -#define SHUT_RDWR 1 -#define SHUT_WR 2 +#define SHUT_RD (1 << 0) +#define SHUT_WR (1 << 1) +#define SHUT_RDWR (SHUT_RD | SHUT_WR) int accept4(int, struct sockaddr* __restrict, socklen_t* __restrict, int); int accept(int, struct sockaddr* __restrict, socklen_t* __restrict); diff --git a/libc/sys/socket/shutdown.cpp b/libc/sys/socket/shutdown.cpp index 50b45861..0431ede8 100644 --- a/libc/sys/socket/shutdown.cpp +++ b/libc/sys/socket/shutdown.cpp @@ -1,6 +1,6 @@ /******************************************************************************* - Copyright(C) Jonas 'Sortie' Termansen 2013. + Copyright(C) Jonas 'Sortie' Termansen 2013, 2014. This file is part of the Sortix C Library. @@ -23,12 +23,11 @@ *******************************************************************************/ #include +#include -#include -#include +DEFN_SYSCALL2(int, sys_shutdown, SYSCALL_SHUTDOWN, int, int); -extern "C" int shutdown(int, int) +extern "C" int shutdown(int fd, int how) { - fprintf(stderr, "%s is not implemented yet.\n", __func__); - return errno = ENOSYS, -1; + return sys_shutdown(fd, how); }