Add shutdown(2).

This commit is contained in:
Jonas 'Sortie' Termansen 2014-06-28 00:11:13 +02:00
parent a00d085b81
commit 577f2f700b
4 changed files with 18 additions and 11 deletions

View File

@ -171,6 +171,7 @@
#define SYSCALL_TCSETBLOB 143 #define SYSCALL_TCSETBLOB 143
#define SYSCALL_GETPEERNAME 144 #define SYSCALL_GETPEERNAME 144
#define SYSCALL_GETSOCKNAME 145 #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 #endif

View File

@ -1080,6 +1080,13 @@ static int sys_getsockname(int fd, struct sockaddr* addr, socklen_t* addrsize)
return errno = ENOSYS, -1; return errno = ENOSYS, -1;
} }
static int sys_shutdown(int fd, int how)
{
(void) fd;
(void) how;
return errno = ENOSYS, -1;
}
void Init() void Init()
{ {
Syscall::Register(SYSCALL_ACCEPT4, (void*) sys_accept4); Syscall::Register(SYSCALL_ACCEPT4, (void*) sys_accept4);
@ -1133,6 +1140,7 @@ void Init()
Syscall::Register(SYSCALL_SEND, (void*) sys_send); Syscall::Register(SYSCALL_SEND, (void*) sys_send);
Syscall::Register(SYSCALL_SETSOCKOPT, (void*) sys_setsockopt); Syscall::Register(SYSCALL_SETSOCKOPT, (void*) sys_setsockopt);
Syscall::Register(SYSCALL_SETTERMMODE, (void*) sys_settermmode); Syscall::Register(SYSCALL_SETTERMMODE, (void*) sys_settermmode);
Syscall::Register(SYSCALL_SHUTDOWN, (void*) sys_shutdown);
Syscall::Register(SYSCALL_SYMLINKAT, (void*) sys_symlinkat); Syscall::Register(SYSCALL_SYMLINKAT, (void*) sys_symlinkat);
Syscall::Register(SYSCALL_TCGETBLOB, (void*) sys_tcgetblob); Syscall::Register(SYSCALL_TCGETBLOB, (void*) sys_tcgetblob);
Syscall::Register(SYSCALL_TCGETPGRP, (void*) sys_tcgetpgrp); Syscall::Register(SYSCALL_TCGETPGRP, (void*) sys_tcgetpgrp);

View File

@ -156,10 +156,9 @@ struct linger
#define PF_LOCAL PF_UNIX #define PF_LOCAL PF_UNIX
/* TODO: Nicely wrap this in an enum, as in glibc's header? */ /* TODO: Nicely wrap this in an enum, as in glibc's header? */
/* TODO: Should SHUT_RDWR = SHUT_RD | SHUT_WR? */ #define SHUT_RD (1 << 0)
#define SHUT_RD 0 #define SHUT_WR (1 << 1)
#define SHUT_RDWR 1 #define SHUT_RDWR (SHUT_RD | SHUT_WR)
#define SHUT_WR 2
int accept4(int, struct sockaddr* __restrict, socklen_t* __restrict, int); int accept4(int, struct sockaddr* __restrict, socklen_t* __restrict, int);
int accept(int, struct sockaddr* __restrict, socklen_t* __restrict); int accept(int, struct sockaddr* __restrict, socklen_t* __restrict);

View File

@ -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. This file is part of the Sortix C Library.
@ -23,12 +23,11 @@
*******************************************************************************/ *******************************************************************************/
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/syscall.h>
#include <errno.h> DEFN_SYSCALL2(int, sys_shutdown, SYSCALL_SHUTDOWN, int, int);
#include <stdio.h>
extern "C" int shutdown(int, int) extern "C" int shutdown(int fd, int how)
{ {
fprintf(stderr, "%s is not implemented yet.\n", __func__); return sys_shutdown(fd, how);
return errno = ENOSYS, -1;
} }