diff --git a/include/sched.h b/include/sched.h index 9062772..3df4c7b 100644 --- a/include/sched.h +++ b/include/sched.h @@ -59,6 +59,7 @@ int sched_yield(void); #define CLONE_IO 0x80000000 int clone (int (*)(void *), void *, int, void *, ...); int unshare(int); +int setns(int, int); #endif #ifdef __cplusplus diff --git a/include/sys/socket.h b/include/sys/socket.h index 7024d23..4d64336 100644 --- a/include/sys/socket.h +++ b/include/sys/socket.h @@ -259,6 +259,10 @@ int sockatmark (int); #define SHUT_WR 1 #define SHUT_RDWR 2 +#ifdef _GNU_SOURCE +int accept4(int, struct sockaddr *__restrict, socklen_t *__restrict, int); +#endif + #ifdef __cplusplus } #endif diff --git a/include/unistd.h b/include/unistd.h index b5206a6..4f6953c 100644 --- a/include/unistd.h +++ b/include/unistd.h @@ -171,6 +171,7 @@ int daemon(int, int); void setusershell(void); void endusershell(void); char *getusershell(void); +int acct(const char *); #endif #ifdef _GNU_SOURCE @@ -181,6 +182,7 @@ int getresuid(uid_t *, uid_t *, uid_t *); int getresgid(gid_t *, gid_t *, gid_t *); char *get_current_dir_name(void); int pipe2(int [2], int); +int dup3(int, int, int); #endif #if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) diff --git a/src/linux/accept4.c b/src/linux/accept4.c new file mode 100644 index 0000000..91db284 --- /dev/null +++ b/src/linux/accept4.c @@ -0,0 +1,9 @@ +#define _GNU_SOURCE +#include +#include "syscall.h" +#include "libc.h" + +int accept4(int fd, struct sockaddr *restrict addr, socklen_t *restrict len, int flg) +{ + return syscall(SYS_accept4, fd, addr, len, flg); +} diff --git a/src/linux/dup3.c b/src/linux/dup3.c new file mode 100644 index 0000000..e201ef0 --- /dev/null +++ b/src/linux/dup3.c @@ -0,0 +1,10 @@ +#define _GNU_SOURCE +#include +#include +#include "syscall.h" + +int dup3(int old, int new, int flags) { + int r; + while ((r=__syscall(SYS_dup3, old, new, flags))==-EBUSY); + return __syscall_ret(r); +} diff --git a/src/linux/setns.c b/src/linux/setns.c new file mode 100644 index 0000000..af3eb09 --- /dev/null +++ b/src/linux/setns.c @@ -0,0 +1,9 @@ +#define _GNU_SOURCE +#include +#include "syscall.h" +#include "libc.h" + +int setns(int fd, int nstype) +{ + return syscall(SYS_setns, fd, nstype); +} diff --git a/src/unistd/acct.c b/src/unistd/acct.c new file mode 100644 index 0000000..9384712 --- /dev/null +++ b/src/unistd/acct.c @@ -0,0 +1,9 @@ +#define _GNU_SOURCE +#include +#include "syscall.h" +#include "libc.h" + +int acct(const char *filename) +{ + return syscall(SYS_acct, filename); +}