Index: distrib/sets/lists/base/ad.mips64eb =================================================================== RCS file: /cvsroot/src/distrib/sets/lists/base/ad.mips64eb,v retrieving revision 1.54 diff -u -u -r1.54 ad.mips64eb --- distrib/sets/lists/base/ad.mips64eb 25 Jun 2011 00:42:57 -0000 1.54 +++ distrib/sets/lists/base/ad.mips64eb 25 Jun 2011 21:27:12 -0000 @@ -66,7 +66,7 @@ ./usr/lib/64/libbz2.so.1 base-compat-shlib compat,pic ./usr/lib/64/libbz2.so.1.1 base-compat-shlib compat,pic ./usr/lib/64/libc.so.12 base-compat-shlib compat,pic -./usr/lib/64/libc.so.12.177 base-compat-shlib compat,pic +./usr/lib/64/libc.so.12.178 base-compat-shlib compat,pic ./usr/lib/64/libcom_err.so.7 base-compat-shlib compat,pic,kerberos ./usr/lib/64/libcom_err.so.7.0 base-compat-shlib compat,pic,kerberos ./usr/lib/64/libcrypt.so.1 base-compat-shlib compat,pic @@ -343,7 +343,7 @@ ./usr/lib/o32/libbz2.so.1 base-compat-shlib compat,pic ./usr/lib/o32/libbz2.so.1.1 base-compat-shlib compat,pic ./usr/lib/o32/libc.so.12 base-compat-shlib compat,pic -./usr/lib/o32/libc.so.12.177 base-compat-shlib compat,pic +./usr/lib/o32/libc.so.12.178 base-compat-shlib compat,pic ./usr/lib/o32/libcom_err.so.7 base-compat-shlib compat,pic,kerberos ./usr/lib/o32/libcom_err.so.7.0 base-compat-shlib compat,pic,kerberos ./usr/lib/o32/libcrypt.so.1 base-compat-shlib compat,pic Index: distrib/sets/lists/base/ad.mips64el =================================================================== RCS file: /cvsroot/src/distrib/sets/lists/base/ad.mips64el,v retrieving revision 1.51 diff -u -u -r1.51 ad.mips64el --- distrib/sets/lists/base/ad.mips64el 25 Jun 2011 00:42:58 -0000 1.51 +++ distrib/sets/lists/base/ad.mips64el 25 Jun 2011 21:27:12 -0000 @@ -66,7 +66,7 @@ ./usr/lib/64/libbz2.so.1 base-compat-shlib compat,pic ./usr/lib/64/libbz2.so.1.1 base-compat-shlib compat,pic ./usr/lib/64/libc.so.12 base-compat-shlib compat,pic -./usr/lib/64/libc.so.12.177 base-compat-shlib compat,pic +./usr/lib/64/libc.so.12.178 base-compat-shlib compat,pic ./usr/lib/64/libcom_err.so.7 base-compat-shlib compat,pic,kerberos ./usr/lib/64/libcom_err.so.7.0 base-compat-shlib compat,pic,kerberos ./usr/lib/64/libcrypt.so.1 base-compat-shlib compat,pic @@ -343,7 +343,7 @@ ./usr/lib/o32/libbz2.so.1 base-compat-shlib compat,pic ./usr/lib/o32/libbz2.so.1.1 base-compat-shlib compat,pic ./usr/lib/o32/libc.so.12 base-compat-shlib compat,pic -./usr/lib/o32/libc.so.12.177 base-compat-shlib compat,pic +./usr/lib/o32/libc.so.12.178 base-compat-shlib compat,pic ./usr/lib/o32/libcom_err.so.7 base-compat-shlib compat,pic,kerberos ./usr/lib/o32/libcom_err.so.7.0 base-compat-shlib compat,pic,kerberos ./usr/lib/o32/libcrypt.so.1 base-compat-shlib compat,pic Index: distrib/sets/lists/base/md.amd64 =================================================================== RCS file: /cvsroot/src/distrib/sets/lists/base/md.amd64,v retrieving revision 1.125 diff -u -u -r1.125 md.amd64 --- distrib/sets/lists/base/md.amd64 25 Jun 2011 00:42:58 -0000 1.125 +++ distrib/sets/lists/base/md.amd64 25 Jun 2011 21:27:13 -0000 @@ -69,7 +69,7 @@ ./usr/lib/i386/libbz2.so.1 base-compat-shlib compat,pic ./usr/lib/i386/libbz2.so.1.1 base-compat-shlib compat,pic ./usr/lib/i386/libc.so.12 base-compat-shlib compat,pic -./usr/lib/i386/libc.so.12.177 base-compat-shlib compat,pic +./usr/lib/i386/libc.so.12.178 base-compat-shlib compat,pic ./usr/lib/i386/libcom_err.so.7 base-compat-shlib compat,pic,kerberos ./usr/lib/i386/libcom_err.so.7.0 base-compat-shlib compat,pic,kerberos ./usr/lib/i386/libcrypt.so.1 base-compat-shlib compat,pic Index: distrib/sets/lists/base/md.sparc64 =================================================================== RCS file: /cvsroot/src/distrib/sets/lists/base/md.sparc64,v retrieving revision 1.118 diff -u -u -r1.118 md.sparc64 --- distrib/sets/lists/base/md.sparc64 25 Jun 2011 00:42:58 -0000 1.118 +++ distrib/sets/lists/base/md.sparc64 25 Jun 2011 21:27:13 -0000 @@ -67,7 +67,7 @@ ./usr/lib/sparc/libbz2.so.1 base-compat-shlib compat,pic ./usr/lib/sparc/libbz2.so.1.1 base-compat-shlib compat,pic ./usr/lib/sparc/libc.so.12 base-compat-shlib compat,pic -./usr/lib/sparc/libc.so.12.177 base-compat-shlib compat,pic +./usr/lib/sparc/libc.so.12.178 base-compat-shlib compat,pic ./usr/lib/sparc/libcom_err.so.7 base-compat-shlib compat,pic,kerberos ./usr/lib/sparc/libcom_err.so.7.0 base-compat-shlib compat,pic,kerberos ./usr/lib/sparc/libcrypt.so.1 base-compat-shlib compat,pic Index: distrib/sets/lists/base/shl.mi =================================================================== RCS file: /cvsroot/src/distrib/sets/lists/base/shl.mi,v retrieving revision 1.588 diff -u -u -r1.588 shl.mi --- distrib/sets/lists/base/shl.mi 25 Jun 2011 00:42:58 -0000 1.588 +++ distrib/sets/lists/base/shl.mi 25 Jun 2011 21:27:14 -0000 @@ -15,7 +15,7 @@ # ./lib/libc.so base-sys-shlib dynamicroot ./lib/libc.so.12 base-sys-shlib dynamicroot -./lib/libc.so.12.177 base-sys-shlib dynamicroot +./lib/libc.so.12.178 base-sys-shlib dynamicroot ./lib/libcrypt.so base-sys-shlib dynamicroot ./lib/libcrypt.so.1 base-sys-shlib dynamicroot ./lib/libcrypt.so.1.0 base-sys-shlib dynamicroot @@ -170,7 +170,7 @@ ./usr/lib/libbz2.so.1.1 base-sys-shlib ./usr/lib/libc.so base-sys-shlib ./usr/lib/libc.so.12 base-sys-shlib -./usr/lib/libc.so.12.177 base-sys-shlib +./usr/lib/libc.so.12.178 base-sys-shlib ./usr/lib/libcdk.so base-obsolete obsolete ./usr/lib/libcom_err.so base-krb5-shlib kerberos ./usr/lib/libcom_err.so.7 base-krb5-shlib kerberos Index: distrib/sets/lists/comp/ad.mips64eb =================================================================== RCS file: /cvsroot/src/distrib/sets/lists/comp/ad.mips64eb,v retrieving revision 1.35 diff -u -u -r1.35 ad.mips64eb --- distrib/sets/lists/comp/ad.mips64eb 12 Jun 2011 20:23:29 -0000 1.35 +++ distrib/sets/lists/comp/ad.mips64eb 25 Jun 2011 21:27:15 -0000 @@ -1202,7 +1202,7 @@ ./usr/libdata/debug/usr/lib/64/libbluetooth.so.4.2.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/64/libbsdmalloc.so.0.0.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/64/libbz2.so.1.1.debug comp-sys-debug debug,compat -./usr/libdata/debug/usr/lib/64/libc.so.12.177.debug comp-sys-debug debug,compat +./usr/libdata/debug/usr/lib/64/libc.so.12.178.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/64/libcom_err.so.6.0.debug comp-compat-shlib compat,pic,kerberos,debug,obsolete ./usr/libdata/debug/usr/lib/64/libcom_err.so.7.0.debug comp-compat-shlib compat,pic,kerberos,debug ./usr/libdata/debug/usr/lib/64/libcrypt.so.1.0.debug comp-sys-debug debug,compat @@ -1409,7 +1409,7 @@ ./usr/libdata/debug/usr/lib/o32/libbluetooth.so.4.2.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/o32/libbsdmalloc.so.0.0.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/o32/libbz2.so.1.1.debug comp-sys-debug debug,compat -./usr/libdata/debug/usr/lib/o32/libc.so.12.177.debug comp-sys-debug debug,compat +./usr/libdata/debug/usr/lib/o32/libc.so.12.178.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/o32/libcom_err.so.6.0.debug comp-compat-shlib compat,pic,kerberos,debug,obsolete ./usr/libdata/debug/usr/lib/o32/libcom_err.so.7.0.debug comp-compat-shlib compat,pic,kerberos,debug ./usr/libdata/debug/usr/lib/o32/libcrypt.so.1.0.debug comp-sys-debug debug,compat Index: distrib/sets/lists/comp/ad.mips64el =================================================================== RCS file: /cvsroot/src/distrib/sets/lists/comp/ad.mips64el,v retrieving revision 1.35 diff -u -u -r1.35 ad.mips64el --- distrib/sets/lists/comp/ad.mips64el 12 Jun 2011 20:23:29 -0000 1.35 +++ distrib/sets/lists/comp/ad.mips64el 25 Jun 2011 21:27:17 -0000 @@ -1202,7 +1202,7 @@ ./usr/libdata/debug/usr/lib/64/libbluetooth.so.4.2.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/64/libbsdmalloc.so.0.0.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/64/libbz2.so.1.1.debug comp-sys-debug debug,compat -./usr/libdata/debug/usr/lib/64/libc.so.12.177.debug comp-sys-debug debug,compat +./usr/libdata/debug/usr/lib/64/libc.so.12.178.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/64/libcom_err.so.6.0.debug comp-compat-shlib compat,pic,kerberos,debug,obsolete ./usr/libdata/debug/usr/lib/64/libcom_err.so.7.0.debug comp-compat-shlib compat,pic,kerberos,debug ./usr/libdata/debug/usr/lib/64/libcrypt.so.1.0.debug comp-sys-debug debug,compat @@ -1409,7 +1409,7 @@ ./usr/libdata/debug/usr/lib/o32/libbluetooth.so.4.2.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/o32/libbsdmalloc.so.0.0.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/o32/libbz2.so.1.1.debug comp-sys-debug debug,compat -./usr/libdata/debug/usr/lib/o32/libc.so.12.177.debug comp-sys-debug debug,compat +./usr/libdata/debug/usr/lib/o32/libc.so.12.178.debug comp-sys-debug debug,compat ./usr/libdata/debug/usr/lib/o32/libcom_err.so.6.0.debug comp-compat-shlib compat,pic,kerberos,debug,obsolete ./usr/libdata/debug/usr/lib/o32/libcom_err.so.7.0.debug comp-compat-shlib compat,pic,kerberos,debug ./usr/libdata/debug/usr/lib/o32/libcrypt.so.1.0.debug comp-sys-debug debug,compat Index: distrib/sets/lists/comp/md.amd64 =================================================================== RCS file: /cvsroot/src/distrib/sets/lists/comp/md.amd64,v retrieving revision 1.117 diff -u -u -r1.117 md.amd64 --- distrib/sets/lists/comp/md.amd64 6 Jun 2011 16:16:00 -0000 1.117 +++ distrib/sets/lists/comp/md.amd64 25 Jun 2011 21:27:18 -0000 @@ -973,7 +973,7 @@ ./usr/libdata/debug/usr/lib/i386/libbluetooth.so.4.2.debug comp-compat-shlib compat,pic,debug ./usr/libdata/debug/usr/lib/i386/libbsdmalloc.so.0.0.debug comp-compat-shlib compat,pic,debug ./usr/libdata/debug/usr/lib/i386/libbz2.so.1.1.debug comp-compat-shlib compat,pic,debug -./usr/libdata/debug/usr/lib/i386/libc.so.12.177.debug comp-compat-shlib compat,pic,debug +./usr/libdata/debug/usr/lib/i386/libc.so.12.178.debug comp-compat-shlib compat,pic,debug ./usr/libdata/debug/usr/lib/i386/libcom_err.so.6.0.debug comp-compat-shlib compat,pic,kerberos,debug,obsolete ./usr/libdata/debug/usr/lib/i386/libcom_err.so.7.0.debug comp-compat-shlib compat,pic,kerberos,debug ./usr/libdata/debug/usr/lib/i386/libcrypt.so.1.0.debug comp-compat-shlib compat,pic,debug Index: distrib/sets/lists/comp/md.sparc64 =================================================================== RCS file: /cvsroot/src/distrib/sets/lists/comp/md.sparc64,v retrieving revision 1.102 diff -u -u -r1.102 md.sparc64 --- distrib/sets/lists/comp/md.sparc64 6 Jun 2011 16:16:00 -0000 1.102 +++ distrib/sets/lists/comp/md.sparc64 25 Jun 2011 21:27:19 -0000 @@ -861,7 +861,7 @@ ./usr/libdata/debug/usr/lib/sparc/libbluetooth.so.4.2.debug comp-compat-shlib compat,pic,debug ./usr/libdata/debug/usr/lib/sparc/libbsdmalloc.so.0.0.debug comp-compat-shlib compat,pic,debug ./usr/libdata/debug/usr/lib/sparc/libbz2.so.1.1.debug comp-compat-shlib compat,pic,debug -./usr/libdata/debug/usr/lib/sparc/libc.so.12.177.debug comp-compat-shlib compat,pic,debug +./usr/libdata/debug/usr/lib/sparc/libc.so.12.178.debug comp-compat-shlib compat,pic,debug ./usr/libdata/debug/usr/lib/sparc/libcom_err.so.6.0.debug comp-compat-shlib compat,pic,kerberos,debug,obsolete ./usr/libdata/debug/usr/lib/sparc/libcom_err.so.7.0.debug comp-compat-shlib compat,pic,kerberos,debug ./usr/libdata/debug/usr/lib/sparc/libcrypt.so.1.0.debug comp-compat-shlib compat,pic,debug Index: distrib/sets/lists/comp/mi =================================================================== RCS file: /cvsroot/src/distrib/sets/lists/comp/mi,v retrieving revision 1.1631 diff -u -u -r1.1631 mi --- distrib/sets/lists/comp/mi 25 Jun 2011 05:45:11 -0000 1.1631 +++ distrib/sets/lists/comp/mi 25 Jun 2011 21:27:42 -0000 @@ -4303,6 +4303,7 @@ ./usr/share/man/cat2/connect.0 comp-c-catman .cat ./usr/share/man/cat2/dup.0 comp-c-catman .cat ./usr/share/man/cat2/dup2.0 comp-c-catman .cat +./usr/share/man/cat2/dup3.0 comp-c-catman .cat ./usr/share/man/cat2/errno.0 comp-c-catman .cat ./usr/share/man/cat2/execve.0 comp-c-catman .cat ./usr/share/man/cat2/extattr_delete_fd.0 comp-c-catman .cat @@ -4424,8 +4425,10 @@ ./usr/share/man/cat2/ntp_adjtime.0 comp-c-catman .cat ./usr/share/man/cat2/ntp_gettime.0 comp-c-catman .cat ./usr/share/man/cat2/open.0 comp-c-catman .cat +./usr/share/man/cat2/paccept.0 comp-c-catman .cat ./usr/share/man/cat2/pathconf.0 comp-c-catman .cat ./usr/share/man/cat2/pipe.0 comp-c-catman .cat +./usr/share/man/cat2/pipe2.0 comp-c-catman .cat ./usr/share/man/cat2/pmc_control.0 comp-c-catman .cat ./usr/share/man/cat2/pmc_get_info.0 comp-c-catman .cat ./usr/share/man/cat2/poll.0 comp-c-catman .cat @@ -10469,6 +10472,7 @@ ./usr/share/man/html2/connect.html comp-c-htmlman html ./usr/share/man/html2/dup.html comp-c-htmlman html ./usr/share/man/html2/dup2.html comp-c-htmlman html +./usr/share/man/html2/dup3.html comp-c-htmlman html ./usr/share/man/html2/errno.html comp-c-htmlman html ./usr/share/man/html2/execve.html comp-c-htmlman html ./usr/share/man/html2/extattr_delete_fd.html comp-c-htmlman html @@ -10584,8 +10588,10 @@ ./usr/share/man/html2/ntp_adjtime.html comp-c-htmlman html ./usr/share/man/html2/ntp_gettime.html comp-c-htmlman html ./usr/share/man/html2/open.html comp-c-htmlman html +./usr/share/man/html2/paccept.html comp-c-htmlman html ./usr/share/man/html2/pathconf.html comp-c-htmlman html ./usr/share/man/html2/pipe.html comp-c-htmlman html +./usr/share/man/html2/pipe2.html comp-c-htmlman html ./usr/share/man/html2/pmc_control.html comp-c-htmlman html ./usr/share/man/html2/pmc_get_info.html comp-c-htmlman html ./usr/share/man/html2/poll.html comp-c-htmlman html @@ -16404,6 +16410,7 @@ ./usr/share/man/man2/connect.2 comp-c-man .man ./usr/share/man/man2/dup.2 comp-c-man .man ./usr/share/man/man2/dup2.2 comp-c-man .man +./usr/share/man/man2/dup3.2 comp-c-man .man ./usr/share/man/man2/errno.2 comp-c-man .man ./usr/share/man/man2/execve.2 comp-c-man .man ./usr/share/man/man2/extattr_delete_fd.2 comp-c-man .man @@ -16524,8 +16531,10 @@ ./usr/share/man/man2/ntp_adjtime.2 comp-c-man .man ./usr/share/man/man2/ntp_gettime.2 comp-c-man .man ./usr/share/man/man2/open.2 comp-c-man .man +./usr/share/man/man2/paccept.2 comp-c-man .man ./usr/share/man/man2/pathconf.2 comp-c-man .man ./usr/share/man/man2/pipe.2 comp-c-man .man +./usr/share/man/man2/pipe2.2 comp-c-man .man ./usr/share/man/man2/pmc_control.2 comp-c-man .man ./usr/share/man/man2/pmc_get_info.2 comp-c-man .man ./usr/share/man/man2/poll.2 comp-c-man .man Index: distrib/sets/lists/comp/shl.mi =================================================================== RCS file: /cvsroot/src/distrib/sets/lists/comp/shl.mi,v retrieving revision 1.175 diff -u -u -r1.175 shl.mi --- distrib/sets/lists/comp/shl.mi 6 Jun 2011 16:16:00 -0000 1.175 +++ distrib/sets/lists/comp/shl.mi 25 Jun 2011 21:27:42 -0000 @@ -230,7 +230,7 @@ ./usr/libdata/debug/usr/lib/libbluetooth.so.4.2.debug comp-sys-debug debug ./usr/libdata/debug/usr/lib/libbsdmalloc.so.0.0.debug comp-sys-debug debug ./usr/libdata/debug/usr/lib/libbz2.so.1.1.debug comp-sys-debug debug -./usr/libdata/debug/usr/lib/libc.so.12.177.debug comp-sys-debug debug +./usr/libdata/debug/usr/lib/libc.so.12.178.debug comp-sys-debug debug ./usr/libdata/debug/usr/lib/libcom_err.so.7.0.debug comp-krb5-debug kerberos,debug ./usr/libdata/debug/usr/lib/libcrypt.so.1.0.debug comp-sys-debug debug ./usr/libdata/debug/usr/lib/libcrypto.so.6.2.debug comp-crypto-debug crypto,debug Index: include/unistd.h =================================================================== RCS file: /cvsroot/src/include/unistd.h,v retrieving revision 1.125 diff -u -u -r1.125 unistd.h --- include/unistd.h 19 Jan 2011 19:21:29 -0000 1.125 +++ include/unistd.h 25 Jun 2011 21:29:42 -0000 @@ -300,6 +300,7 @@ int closefrom(int); int des_cipher(const char *, char *, long, int); int des_setkey(const char *); +int dup3(int, int, int); void endusershell(void); int exect(const char *, char * const *, char * const *); int fchroot(int); @@ -315,11 +316,12 @@ int iruserok(uint32_t, int, const char *, const char *); int issetugid(void); int nfssvc(int, void *); +int pipe2(int *, int); int profil(char *, size_t, u_long, u_int); #ifndef __PSIGNAL_DECLARED #define __PSIGNAL_DECLARED /* also in signal.h */ -void psignal(int, const char *); +void psignal(int, const char *); #endif /* __PSIGNAL_DECLARED */ int rcmd(char **, int, const char *, const char *, const char *, int *); int reboot(int, char *); Index: lib/libc/shlib_version =================================================================== RCS file: /cvsroot/src/lib/libc/shlib_version,v retrieving revision 1.222 diff -u -u -r1.222 shlib_version --- lib/libc/shlib_version 12 Mar 2011 19:52:47 -0000 1.222 +++ lib/libc/shlib_version 25 Jun 2011 21:29:43 -0000 @@ -31,4 +31,4 @@ # it's insufficient bitwidth to implement all ctype class. # see isblank's comment in ctype.h. major=12 -minor=177 +minor=178 Index: lib/libc/gen/popen.3 =================================================================== RCS file: /cvsroot/src/lib/libc/gen/popen.3,v retrieving revision 1.16 diff -u -u -r1.16 popen.3 --- lib/libc/gen/popen.3 2 Aug 2007 23:45:10 -0000 1.16 +++ lib/libc/gen/popen.3 25 Jun 2011 21:29:45 -0000 @@ -29,7 +29,7 @@ .\" .\" @(#)popen.3 8.2 (Berkeley) 5/3/95 .\" -.Dd August 2, 2007 +.Dd June 24, 2011 .Dt POPEN 3 .Os .Sh NAME @@ -76,6 +76,12 @@ for writing, or .Ql r+ for reading and writing. +In addition if the character +.Ql e +is present in the +.Fa type +string, the file descriptor used internally is set to be closed on +.Xr exec 2 . .Pp The .Fa command Index: lib/libc/gen/popen.c =================================================================== RCS file: /cvsroot/src/lib/libc/gen/popen.c,v retrieving revision 1.30 diff -u -u -r1.30 popen.c --- lib/libc/gen/popen.c 14 Nov 2010 18:11:42 -0000 1.30 +++ lib/libc/gen/popen.c 25 Jun 2011 21:29:45 -0000 @@ -54,6 +54,7 @@ #include <stdlib.h> #include <string.h> #include <unistd.h> +#include <fcntl.h> #include "env.h" #include "reentrant.h" @@ -84,22 +85,23 @@ const char * volatile xtype = type; int pdes[2], pid, serrno; volatile int twoway; + int flags; _DIAGASSERT(command != NULL); _DIAGASSERT(xtype != NULL); + flags = strchr(xtype, 'e') ? O_CLOEXEC : 0; if (strchr(xtype, '+')) { + int stype = flags ? (SOCK_STREAM | SOCK_CLOEXEC) : SOCK_STREAM; twoway = 1; - type = "r+"; - if (socketpair(AF_LOCAL, SOCK_STREAM, 0, pdes) < 0) - return (NULL); + xtype = "r+"; + if (socketpair(AF_LOCAL, stype, 0, pdes) < 0) + return NULL; } else { twoway = 0; - if ((*xtype != 'r' && *xtype != 'w') || xtype[1] || - (pipe(pdes) < 0)) { - errno = EINVAL; - return (NULL); - } + xtype = strrchr(xtype, 'r') ? "r" : "w"; + if (pipe2(pdes, flags) == -1) + return NULL; } if ((cur = malloc(sizeof(struct pid))) == NULL) { Index: lib/libc/stdio/flags.c =================================================================== RCS file: /cvsroot/src/lib/libc/stdio/flags.c,v retrieving revision 1.14 diff -u -u -r1.14 flags.c --- lib/libc/stdio/flags.c 7 Aug 2003 16:43:23 -0000 1.14 +++ lib/libc/stdio/flags.c 25 Jun 2011 21:29:46 -0000 @@ -55,9 +55,7 @@ * Return 0 on error. */ int -__sflags(mode, optr) - const char *mode; - int *optr; +__sflags(const char *mode, int *optr) { int ret, m, o; @@ -90,7 +88,8 @@ /* * [rwa]\+ or [rwa]b\+ means read and write - * f means open only plain files. + * f means open only plain files, + * e means set close on exec. */ for (; *mode; mode++) switch (*mode) { @@ -101,6 +100,9 @@ case 'f': o |= O_NONBLOCK; break; + case 'e': + o |= O_CLOEXEC; + break; case 'b': break; default: /* We could produce a warning here */ Index: lib/libc/stdio/fopen.3 =================================================================== RCS file: /cvsroot/src/lib/libc/stdio/fopen.3,v retrieving revision 1.24 diff -u -u -r1.24 fopen.3 --- lib/libc/stdio/fopen.3 5 Apr 2010 21:34:47 -0000 1.24 +++ lib/libc/stdio/fopen.3 25 Jun 2011 21:29:46 -0000 @@ -33,7 +33,7 @@ .\" .\" @(#)fopen.3 8.1 (Berkeley) 6/4/93 .\" -.Dd June 4, 1993 +.Dd June 24, 2011 .Dt FOPEN 3 .Os .Sh NAME @@ -84,14 +84,20 @@ .Pp The .Fa mode -string can also include the letter ``b'' either as a last character or +string can also include the letter +.Dq b +either as a last character or as a character between the characters in any of the two-character strings described above. This is strictly for compatibility with .St -ansiC -and has no effect; the ``b'' is ignored. -.Pp -The letter ``f'' in the mode string restricts fopen to regular +and has no effect; the +.Dq b +is ignored. +.Pp +The letter +.Dq f +in the mode string restricts fopen to regular files; if the file opened is not a regular file, .Fn fopen will fail. @@ -99,6 +105,16 @@ .St -ansiC extension. .Pp +the letter +.Dq e +in the mode string sets the close-on-exec flag in the file descriptors of +the newly opened file files; if the operation fails, +.Fn fopen +will fail. +This is a non +.St -ansiC +extension. +.Pp Any created files will have mode .Pf \*q Dv S_IRUSR \&| Index: lib/libc/sys/Makefile.inc =================================================================== RCS file: /cvsroot/src/lib/libc/sys/Makefile.inc,v retrieving revision 1.205 diff -u -u -r1.205 Makefile.inc --- lib/libc/sys/Makefile.inc 6 Mar 2011 17:08:15 -0000 1.205 +++ lib/libc/sys/Makefile.inc 25 Jun 2011 21:29:46 -0000 @@ -77,7 +77,7 @@ bind.S \ chdir.S chflags.S chmod.S chown.S chroot.S __clock_getres50.S \ __clock_gettime50.S \ - dup.S dup2.S \ + dup.S dup2.S dup3.S \ extattrctl.S \ extattr_delete_fd.S extattr_delete_file.S \ extattr_delete_link.S extattr_get_fd.S extattr_get_file.S \ @@ -92,7 +92,7 @@ getpriority.S getrlimit.S __getrusage50.S getsid.S \ getsockname.S getsockopt.S __gettimeofday50.S \ ioctl.S \ - kqueue.S ktrace.S \ + kqueue.S kqueue1.S ktrace.S \ _ksem_close.S _ksem_destroy.S _ksem_getvalue.S _ksem_init.S \ _ksem_post.S _ksem_trywait.S _ksem_unlink.S _ksem_wait.S \ _ksem_open.S \ @@ -107,8 +107,9 @@ mlock.S mlockall.S modctl.S __mount50.S mprotect.S \ __msgctl50.S msgget.S munlock.S munlockall.S munmap.S \ nfssvc.S __ntp_gettime50.S \ - pathconf.S pmc_get_info.S pmc_control.S __posix_chown.S \ - __posix_fchown.S __posix_lchown.S __posix_rename.S profil.S \ + paccept.S pathconf.S pipe2.S pmc_get_info.S pmc_control.S \ + __posix_chown.S __posix_fchown.S __posix_lchown.S \ + __posix_rename.S profil.S \ __quotactl50.S \ rasctl.S reboot.S recvfrom.S recvmsg.S rename.S revoke.S \ rmdir.S \ @@ -242,6 +243,7 @@ MLINKS+=brk.2 sbrk.2 MLINKS+=clone.2 __clone.2 MLINKS+=dup.2 dup2.2 +MLINKS+=dup.2 dup3.2 MLINKS+=chdir.2 fchdir.2 MLINKS+=chflags.2 fchflags.2 chflags.2 lchflags.2 MLINKS+=chmod.2 fchmod.2 chmod.2 lchmod.2 @@ -308,3 +310,5 @@ MLINKS+=utimes.2 futimes.2 utimes.2 lutimes.2 MLINKS+=wait.2 wait3.2 wait.2 wait4.2 wait.2 waitpid.2 MLINKS+=write.2 writev.2 write.2 pwrite.2 write.2 pwritev.2 +MLINKS+=pipe.2 pipe2.2 +MLINKS+=accept.2 paccept.2 Index: lib/libc/sys/accept.2 =================================================================== RCS file: /cvsroot/src/lib/libc/sys/accept.2,v retrieving revision 1.26 diff -u -u -r1.26 accept.2 --- lib/libc/sys/accept.2 2 Jun 2011 01:04:18 -0000 1.26 +++ lib/libc/sys/accept.2 25 Jun 2011 21:29:47 -0000 @@ -33,7 +33,8 @@ .Dt ACCEPT 2 .Os .Sh NAME -.Nm accept +.Nm accept , +.Nm paccept .Nd accept a connection on a socket .Sh LIBRARY .Lb libc @@ -41,6 +42,8 @@ .In sys/socket.h .Ft int .Fn accept "int s" "struct sockaddr * restrict addr" "socklen_t * restrict addrlen" +.Ft int +.Fn paccept "int s" "struct sockaddr * restrict addr" "socklen_t * restrict addrlen" "const sigset_t * restrict sigmask" "int flags" .Sh DESCRIPTION The argument .Fa s @@ -131,12 +134,41 @@ call with providing only the control information, or by calling .Xr setsockopt 2 . +.Pp +The +.Fn paccept +function behaves exactly like +.Fn accept , +but it also allows to set the following +.Fa flags +on the returned file descriptor: +.Bl -column SOCK_NONBLOCK -offset indent +.It Dv SOCK_CLOEXEC +Set the close on exec property. +.It Dv SOCK_NONBLOCK +Sets non-blocking I/O. +.El +.Pp +It can also temporarily replace the signal mask of the calling thread if +.Fa sigmask +is a non-null pointer, then the +.Fn paccept +function shall replace the signal mask of the caller by the set of +signals pointed to by +.Fa sigmask +before waiting for a connection, and shall restore the signal mask +of the calling thread before returning. .Sh RETURN VALUES -The call returns \-1 on error. -If it succeeds, it returns a non-negative +The +.Fn accept +and +.Fn paccept calls return \-1 on error. +If they succeed, they return a non-negative integer that is a descriptor for the accepted socket. .Sh COMPATIBILITY -This implementation makes the new file descriptor inherit file flags +The +.Fn accept +implementation makes the new file descriptor inherit file flags (like .Dv O_NONBLOCK ) from the listening socket. @@ -192,3 +224,7 @@ .Fn accept function appeared in .Bx 4.2 . +The +.Fn pselect +function is inspired from Linux and appeared in +.Nx 6.0 . Index: lib/libc/sys/dup.2 =================================================================== RCS file: /cvsroot/src/lib/libc/sys/dup.2,v retrieving revision 1.21 diff -u -u -r1.21 dup.2 --- lib/libc/sys/dup.2 11 Jan 2009 02:46:30 -0000 1.21 +++ lib/libc/sys/dup.2 25 Jun 2011 21:29:47 -0000 @@ -29,12 +29,13 @@ .\" .\" @(#)dup.2 8.1 (Berkeley) 6/4/93 .\" -.Dd December 2, 2008 +.Dd June 24, 2011 .Dt DUP 2 .Os .Sh NAME .Nm dup , -.Nm dup2 +.Nm dup2 , +.Nm dup3 .Nd duplicate an existing file descriptor .Sh LIBRARY .Lb libc @@ -44,6 +45,8 @@ .Fn dup "int oldd" .Ft int .Fn dup2 "int oldd" "int newd" +.Ft int +.Fn dup3 "int oldd" "int newd" "int flags" .Sh DESCRIPTION .Fn dup duplicates an existing object descriptor and returns its value to @@ -100,6 +103,20 @@ and .Fa oldd are the same, the call has no effect. +.Pp +.Fn dup3 +behaves exactly like +.Fn dup2 +only it allows extra +.Fa flags +to be set on the returned file descriptor. +The following flags are valid: +.Bl -column O_NONBLOCK -offset indent +.It Dv O_CLOEXEC +Set the close on exec property. +.It Dv O_NONBLOCK +Sets non-blocking I/O. +.El .Sh RETURN VALUES The value \-1 is returned if an error occurs in either call. The external variable @@ -107,8 +124,9 @@ indicates the cause of the error. .Sh ERRORS .Fn dup -and .Fn dup2 +and +.Fn dup3 fail if: .Bl -tag -width Er .It Bq Er EBADF @@ -136,3 +154,8 @@ .Fn dup2 functions conform to .St -p1003.1-90 . +.Sh HISTORY +The +.Fn dup3 +function is inspired from Linux and appeared in +.Nx 6.0 . Index: lib/libc/sys/fcntl.2 =================================================================== RCS file: /cvsroot/src/lib/libc/sys/fcntl.2,v retrieving revision 1.37 diff -u -u -r1.37 fcntl.2 --- lib/libc/sys/fcntl.2 17 May 2010 12:16:43 -0000 1.37 +++ lib/libc/sys/fcntl.2 25 Jun 2011 21:29:47 -0000 @@ -29,7 +29,7 @@ .\" .\" @(#)fcntl.2 8.2 (Berkeley) 1/12/94 .\" -.Dd May 17, 2010 +.Dd June 25, 2011 .Dt FCNTL 2 .Os .Sh NAME @@ -55,7 +55,7 @@ interpreted as an int by some commands and ignored by others. .Pp Commands are: -.Bl -tag -width F_GETOWNX +.Bl -tag -width F_DUPFD_CLOEXEC .It Dv F_DUPFD Return a new descriptor as follows: .Pp @@ -80,6 +80,9 @@ .Xr execve 2 system calls. .El +.It Dv F_DUPFD_CLOEXEC +Same as F_DUPFD, but sets the close-on-exec property on the file descriptor +created. .It Dv F_GETFD Get the close-on-exec flag associated with the file descriptor .Fa fd Index: lib/libc/sys/kqueue.2 =================================================================== RCS file: /cvsroot/src/lib/libc/sys/kqueue.2,v retrieving revision 1.30 diff -u -u -r1.30 kqueue.2 --- lib/libc/sys/kqueue.2 24 May 2011 02:31:11 -0000 1.30 +++ lib/libc/sys/kqueue.2 25 Jun 2011 21:29:47 -0000 @@ -32,11 +32,12 @@ .\" .\" $FreeBSD: src/lib/libc/sys/kqueue.2,v 1.22 2001/06/27 19:55:57 dd Exp $ .\" -.Dd April 13, 2010 +.Dd June 24, 2011 .Dt KQUEUE 2 .Os .Sh NAME .Nm kqueue , +.Nm kqueue1 , .Nm kevent .Nd kernel event notification mechanism .Sh LIBRARY @@ -47,6 +48,8 @@ .Ft int .Fn kqueue "void" .Ft int +.Fn kqueue1 "int flags" +.Ft int .Fn kevent "int kq" "const struct kevent *changelist" "size_t nchanges" "struct kevent *eventlist" "size_t nevents" "const struct timespec *timeout" .Fn EV_SET "\*[Am]kev" ident filter flags fflags data udata .Sh DESCRIPTION @@ -78,6 +81,18 @@ .Pp .Fn kqueue creates a new kernel event queue and returns a descriptor. +.Pp +The +.Fn kqueue1 +also allows to set the following +.Fa flags +on the returned file descriptor: +.Bl -column O_NONBLOCK -offset indent +.It Dv O_CLOEXEC +Set the close on exec property. +.It Dv O_NONBLOCK +Sets non-blocking I/O. +.El The queue is not inherited by a child created with .Xr fork 2 . .\" However, if @@ -617,3 +632,7 @@ .Fx 4.1 , and then in .Nx 2.0 . +The +.Fn kqueue1 +function first appeared in +.Nx 6.0 . Index: lib/libc/sys/pipe.2 =================================================================== RCS file: /cvsroot/src/lib/libc/sys/pipe.2,v retrieving revision 1.22 diff -u -u -r1.22 pipe.2 --- lib/libc/sys/pipe.2 13 May 2004 10:20:58 -0000 1.22 +++ lib/libc/sys/pipe.2 25 Jun 2011 21:29:47 -0000 @@ -29,7 +29,7 @@ .\" .\" @(#)pipe.2 8.1 (Berkeley) 6/4/93 .\" -.Dd July 17, 1994 +.Dd June 24, 2011 .Dt PIPE 2 .Os .Sh NAME @@ -41,6 +41,8 @@ .In unistd.h .Ft int .Fn pipe "int fildes[2]" +.Ft int +.Fn pipe2 "int fildes[2]" "int flags" .Sh DESCRIPTION The .Fn pipe @@ -78,6 +80,22 @@ Widowing a pipe is the only way to deliver end-of-file to a reader: after the reader consumes any buffered data, reading a widowed pipe returns a zero count. +.Pp +The +.Fn pipe2 +function +behaves exactly like +.Fn pipe +only it allows extra +.Fa flags +to be set on the returned file descriptor. +The following flags are valid: +.Bl -column O_NONBLOCK -offset indent +.It Dv O_CLOEXEC +Set the close on exec property. +.It Dv O_NONBLOCK +Sets non-blocking I/O. +.El .Sh RETURN VALUES On successful creation of the pipe, zero is returned. Otherwise, a value of \-1 is returned and the variable @@ -87,7 +105,9 @@ .Sh ERRORS The .Fn pipe -call will fail if: +and +.Fn pipe2 +calls will fail if: .Bl -tag -width Er .It Bq Er EMFILE Too many descriptors are active. @@ -117,3 +137,7 @@ .Fn pipe function call appeared in .At v6 . +The +.Fn pipe2 +function is inspired from Linux and appeared in +.Nx 6.0 . Index: lib/libc/sys/recv.2 =================================================================== RCS file: /cvsroot/src/lib/libc/sys/recv.2,v retrieving revision 1.27 diff -u -u -r1.27 recv.2 --- lib/libc/sys/recv.2 23 Apr 2006 19:06:59 -0000 1.27 +++ lib/libc/sys/recv.2 25 Jun 2011 21:29:47 -0000 @@ -29,7 +29,7 @@ .\" .\" @(#)recv.2 8.3 (Berkeley) 2/21/94 .\" -.Dd April 23, 2006 +.Dd June 24, 2011 .Dt RECV 2 .Os .Sh NAME @@ -116,7 +116,8 @@ argument to a recv call is formed by .Em or Ap ing one or more of the values: -.Bl -column MSG_WAITALL -offset indent +.Bl -column MSG_CMSG_CLOEXEC -offset indent +.It Dv MSG_CMSG_CLOEXEC Ta set the close on exec property for passed file descriptors .It Dv MSG_OOB Ta process out-of-band data .It Dv MSG_PEEK Ta peek at incoming message .It Dv MSG_WAITALL Ta wait for full request or error Index: lib/libc/sys/socket.2 =================================================================== RCS file: /cvsroot/src/lib/libc/sys/socket.2,v retrieving revision 1.36 diff -u -u -r1.36 socket.2 --- lib/libc/sys/socket.2 6 Sep 2007 09:32:52 -0000 1.36 +++ lib/libc/sys/socket.2 25 Jun 2011 21:29:48 -0000 @@ -78,6 +78,16 @@ SOCK_RDM .Ed .Pp +The following flags can be or'ed to the type to condition the returned +file descriptor: +The following flags are valid: +.Bl -column SOCK_NONBLOCK -offset indent +.It Dv SOCK_CLOEXEC +Set the close on exec property. +.It Dv SOCK_NONBLOCK +Sets non-blocking I/O. +.El +.Pp A .Dv SOCK_STREAM type provides sequenced, reliable, Index: lib/libc/sys/socketpair.2 =================================================================== RCS file: /cvsroot/src/lib/libc/sys/socketpair.2,v retrieving revision 1.21 diff -u -u -r1.21 socketpair.2 --- lib/libc/sys/socketpair.2 20 Dec 2009 02:16:40 -0000 1.21 +++ lib/libc/sys/socketpair.2 25 Jun 2011 21:29:48 -0000 @@ -29,7 +29,7 @@ .\" .\" @(#)socketpair.2 8.1 (Berkeley) 6/4/93 .\" -.Dd December 20, 2009 +.Dd June 24, 2011 .Dt SOCKETPAIR 2 .Os .Sh NAME @@ -57,6 +57,13 @@ and .Fa sv Ns [1] . The two sockets are indistinguishable. +.Pp +The +.Fa type +and +.Fa protocol +argument values are described in +.Xr socket 2 . .Sh RETURN VALUES A 0 is returned if the call succeeds, \-1 if it fails. .Sh ERRORS @@ -81,6 +88,7 @@ .Sh SEE ALSO .Xr pipe 2 , .Xr read 2 , +.Xr socket 2 , .Xr write 2 .Sh HISTORY The Index: sys/compat/svr4/svr4_stream.c =================================================================== RCS file: /cvsroot/src/sys/compat/svr4/svr4_stream.c,v retrieving revision 1.78 diff -u -u -r1.78 svr4_stream.c --- sys/compat/svr4/svr4_stream.c 19 Nov 2010 06:44:38 -0000 1.78 +++ sys/compat/svr4/svr4_stream.c 25 Jun 2011 21:30:18 -0000 @@ -1682,7 +1682,8 @@ * We are after a listen, so we try to accept... */ - error = do_sys_accept(l, SCARG(uap, fd), &name, retval); + error = do_sys_accept(l, SCARG(uap, fd), &name, retval, + NULL, 0, FNONBLOCK); if (error != 0) { DPRINTF(("getmsg: accept failed %d\n", error)); goto out; Index: sys/kern/init_sysent.c =================================================================== RCS file: /cvsroot/src/sys/kern/init_sysent.c,v retrieving revision 1.254 diff -u -u -r1.254 init_sysent.c --- sys/kern/init_sysent.c 6 Mar 2011 17:08:36 -0000 1.254 +++ sys/kern/init_sysent.c 25 Jun 2011 21:30:23 -0000 @@ -1,14 +1,14 @@ -/* $NetBSD: init_sysent.c,v 1.254 2011/03/06 17:08:36 bouyer Exp $ */ +/* $NetBSD$ */ /* * System call switch table. * * DO NOT EDIT-- this file is automatically generated. - * created from NetBSD + * created from NetBSD: syscalls.master,v 1.248 2011/03/09 22:12:45 pooka Exp */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: init_sysent.c,v 1.254 2011/03/06 17:08:36 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD$"); #include "opt_modular.h" #include "opt_ntp.h" @@ -16,6 +16,7 @@ #include <sys/param.h> #include <sys/systm.h> #include <sys/signal.h> +#include <sys/socket.h> #include <sys/mount.h> #include <sys/sched.h> #include <sys/syscallargs.h> @@ -1097,14 +1098,14 @@ (sy_call_t *)sys___fhstat50 }, /* 451 = __fhstat50 */ { ns(struct sys___quotactl50_args), 0, (sy_call_t *)sys___quotactl50 }, /* 452 = __quotactl50 */ - { 0, 0, 0, - sys_nosys }, /* 453 = filler */ - { 0, 0, 0, - sys_nosys }, /* 454 = filler */ - { 0, 0, 0, - sys_nosys }, /* 455 = filler */ - { 0, 0, 0, - sys_nosys }, /* 456 = filler */ + { ns(struct sys_pipe2_args), 0, + (sy_call_t *)sys_pipe2 }, /* 453 = pipe2 */ + { ns(struct sys_dup3_args), 0, + (sy_call_t *)sys_dup3 }, /* 454 = dup3 */ + { ns(struct sys_kqueue1_args), 0, + (sy_call_t *)sys_kqueue1 }, /* 455 = kqueue1 */ + { ns(struct sys_paccept_args), 0, + (sy_call_t *)sys_paccept }, /* 456 = paccept */ { 0, 0, 0, sys_nosys }, /* 457 = filler */ { 0, 0, 0, Index: sys/kern/kern_descrip.c =================================================================== RCS file: /cvsroot/src/sys/kern/kern_descrip.c,v retrieving revision 1.214 diff -u -u -r1.214 kern_descrip.c --- sys/kern/kern_descrip.c 24 Apr 2011 20:30:38 -0000 1.214 +++ sys/kern/kern_descrip.c 25 Jun 2011 21:30:23 -0000 @@ -729,7 +729,7 @@ * dup2 operation. */ int -fd_dup2(file_t *fp, unsigned new) +fd_dup2(file_t *fp, unsigned new, int flags) { filedesc_t *fdp = curlwp->l_fd; fdfile_t *ff; @@ -773,6 +773,8 @@ fd_used(fdp, new); mutex_exit(&fdp->fd_lock); + dt->dt_ff[new]->ff_exclose = (flags & O_CLOEXEC) != 0; + fp->f_flag |= flags & FNONBLOCK; /* Slot is now allocated. Insert copy of the file. */ fd_affix(curproc, fp, new); if (ff != NULL) { Index: sys/kern/kern_event.c =================================================================== RCS file: /cvsroot/src/sys/kern/kern_event.c,v retrieving revision 1.71 diff -u -u -r1.71 kern_event.c --- sys/kern/kern_event.c 10 Sep 2010 10:23:46 -0000 1.71 +++ sys/kern/kern_event.c 25 Jun 2011 21:30:24 -0000 @@ -714,8 +714,8 @@ /* * kqueue(2) system call. */ -int -sys_kqueue(struct lwp *l, const void *v, register_t *retval) +static int +kqueue1(struct lwp *l, int flags, register_t *retval) { struct kqueue *kq; file_t *fp; @@ -723,7 +723,7 @@ if ((error = fd_allocfile(&fp, &fd)) != 0) return error; - fp->f_flag = FREAD | FWRITE; + fp->f_flag = FREAD | FWRITE | (flags & FNONBLOCK); fp->f_type = DTYPE_KQUEUE; fp->f_ops = &kqueueops; kq = kmem_zalloc(sizeof(*kq), KM_SLEEP); @@ -734,11 +734,31 @@ fp->f_data = kq; *retval = fd; kq->kq_fdp = curlwp->l_fd; + fd_set_exclose(l, fd, (flags & O_CLOEXEC) != 0); fd_affix(curproc, fp, fd); return error; } /* + * kqueue(2) system call. + */ +int +sys_kqueue(struct lwp *l, const void *v, register_t *retval) +{ + return kqueue1(l, 0, retval); +} + +int +sys_kqueue1(struct lwp *l, const struct sys_kqueue1_args *uap, + register_t *retval) +{ + /* { + syscallarg(int) flags; + } */ + return kqueue1(l, SCARG(uap, flags), retval); +} + +/* * kevent(2) system call. */ int Index: sys/kern/sys_descrip.c =================================================================== RCS file: /cvsroot/src/sys/kern/sys_descrip.c,v retrieving revision 1.21 diff -u -u -r1.21 sys_descrip.c --- sys/kern/sys_descrip.c 12 Jun 2011 03:35:56 -0000 1.21 +++ sys/kern/sys_descrip.c 25 Jun 2011 21:30:26 -0000 @@ -122,41 +122,54 @@ /* * Duplicate a file descriptor to a particular value. */ -int -sys_dup2(struct lwp *l, const struct sys_dup2_args *uap, register_t *retval) +static int +dodup(struct lwp *l, int from, int to, int flags, register_t *retval) { - /* { - syscallarg(int) from; - syscallarg(int) to; - } */ - int old, new, error; + int error; file_t *fp; - old = SCARG(uap, from); - new = SCARG(uap, to); - - if ((fp = fd_getfile(old)) == NULL) { + if ((fp = fd_getfile(from)) == NULL) return EBADF; - } mutex_enter(&fp->f_lock); fp->f_count++; mutex_exit(&fp->f_lock); - fd_putfile(old); + fd_putfile(from); - if ((u_int)new >= curproc->p_rlimit[RLIMIT_NOFILE].rlim_cur || - (u_int)new >= maxfiles) { + if ((u_int)to >= curproc->p_rlimit[RLIMIT_NOFILE].rlim_cur || + (u_int)to >= maxfiles) error = EBADF; - } else if (old == new) { + else if (from == to) error = 0; - } else { - error = fd_dup2(fp, new); - } + else + error = fd_dup2(fp, to, flags); closef(fp); - *retval = new; + *retval = to; return error; } +int +sys_dup3(struct lwp *l, const struct sys_dup3_args *uap, register_t *retval) +{ + /* { + syscallarg(int) from; + syscallarg(int) to; + syscallarg(int) flags; + } */ + return dodup(l, SCARG(uap, from), SCARG(uap, to), SCARG(uap, flags), + retval); +} + +int +sys_dup2(struct lwp *l, const struct sys_dup2_args *uap, register_t *retval) +{ + /* { + syscallarg(int) from; + syscallarg(int) to; + } */ + return dodup(l, SCARG(uap, from), SCARG(uap, to), 0, retval); +} + /* * fcntl call which is being passed to the file's fs. */ @@ -316,6 +329,7 @@ filedesc_t *fdp; file_t *fp; struct flock fl; + bool cloexec = false; fd = SCARG(uap, fd); cmd = SCARG(uap, cmd); @@ -365,6 +379,9 @@ } switch (cmd) { + case F_DUPFD_CLOEXEC: + cloexec = true; + /*FALLTHROUGH*/ case F_DUPFD: newmin = (long)SCARG(uap, arg); if ((u_int)newmin >= @@ -373,7 +390,7 @@ fd_putfile(fd); return EINVAL; } - error = fd_dup(fp, newmin, &i, false); + error = fd_dup(fp, newmin, &i, cloexec); *retval = i; break; @@ -722,3 +739,25 @@ return 0; } + +int +sys_pipe(struct lwp *l, const void *v, register_t *retval) +{ + return pipe1(l, retval, 0); +} + +int +sys_pipe2(struct lwp *l, const struct sys_pipe2_args *uap, register_t *retval) +{ + /* { + syscallarg(int[2]) fildes; + syscallarg(int) flags; + } */ + int fd[2], error; + + if ((error = pipe1(l, retval, SCARG(uap, flags))) != 0) + return error; + fd[0] = retval[0]; + fd[1] = retval[1]; + return copyout(fd, SCARG(uap, fildes), sizeof(fd)); +} Index: sys/kern/sys_pipe.c =================================================================== RCS file: /cvsroot/src/sys/kern/sys_pipe.c,v retrieving revision 1.130 diff -u -u -r1.130 sys_pipe.c --- sys/kern/sys_pipe.c 10 Apr 2011 15:45:33 -0000 1.130 +++ sys/kern/sys_pipe.c 25 Jun 2011 21:30:26 -0000 @@ -295,12 +295,6 @@ return (error); } -int -sys_pipe(struct lwp *l, const void *v, register_t *retval) -{ - return pipe1(l, retval, 0); -} - /* * Allocate kva for pipe circular buffer, the space is pageable * This routine will 'realloc' the size of a pipe safely, if it fails Index: sys/kern/syscalls.c =================================================================== RCS file: /cvsroot/src/sys/kern/syscalls.c,v retrieving revision 1.245 diff -u -u -r1.245 syscalls.c --- sys/kern/syscalls.c 6 Mar 2011 17:08:36 -0000 1.245 +++ sys/kern/syscalls.c 25 Jun 2011 21:30:27 -0000 @@ -1,14 +1,14 @@ -/* $NetBSD: syscalls.c,v 1.245 2011/03/06 17:08:36 bouyer Exp $ */ +/* $NetBSD$ */ /* * System call names. * * DO NOT EDIT-- this file is automatically generated. - * created from NetBSD + * created from NetBSD: syscalls.master,v 1.248 2011/03/09 22:12:45 pooka Exp */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: syscalls.c,v 1.245 2011/03/06 17:08:36 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD$"); #if defined(_KERNEL_OPT) #include "opt_modular.h" @@ -17,6 +17,7 @@ #include <sys/param.h> #include <sys/systm.h> #include <sys/signal.h> +#include <sys/socket.h> #include <sys/mount.h> #include <sys/sched.h> #include <sys/syscallargs.h> @@ -541,10 +542,10 @@ /* 450 */ "__mknod50", /* 451 */ "__fhstat50", /* 452 */ "__quotactl50", - /* 453 */ "# filler", - /* 454 */ "# filler", - /* 455 */ "# filler", - /* 456 */ "# filler", + /* 453 */ "pipe2", + /* 454 */ "dup3", + /* 455 */ "kqueue1", + /* 456 */ "paccept", /* 457 */ "# filler", /* 458 */ "# filler", /* 459 */ "# filler", Index: sys/kern/syscalls.conf =================================================================== RCS file: /cvsroot/src/sys/kern/syscalls.conf,v retrieving revision 1.16 diff -u -u -r1.16 syscalls.conf --- sys/kern/syscalls.conf 18 Jan 2011 17:33:05 -0000 1.16 +++ sys/kern/syscalls.conf 25 Jun 2011 21:30:27 -0000 @@ -4,7 +4,7 @@ sysnumhdr="../sys/syscall.h" syssw="init_sysent.c" sysarghdr="../sys/syscallargs.h" -sysarghdrextra='#include <sys/mount.h>\n#include <sys/sched.h>\n\n' +sysarghdrextra='#include <sys/mount.h>\n#include <sys/sched.h>\n#include <sys/socket.h>\n\n' sysalign=1 rumpcalls="../rump/librump/rumpkern/rump_syscalls.c" rumpcallshdr="../rump/include/rump/rump_syscalls.h" Index: sys/kern/syscalls.master =================================================================== RCS file: /cvsroot/src/sys/kern/syscalls.master,v retrieving revision 1.248 diff -u -u -r1.248 syscalls.master --- sys/kern/syscalls.master 9 Mar 2011 22:12:45 -0000 1.248 +++ sys/kern/syscalls.master 25 Jun 2011 21:30:27 -0000 @@ -51,6 +51,7 @@ #include <sys/param.h> #include <sys/systm.h> #include <sys/signal.h> +#include <sys/socket.h> #include <sys/mount.h> #include <sys/sched.h> #include <sys/syscallargs.h> @@ -106,13 +107,13 @@ const struct msghdr *msg, int flags); } 29 STD RUMP { ssize_t|sys||recvfrom(int s, void *buf, size_t len, \ int flags, struct sockaddr *from, \ - unsigned int *fromlenaddr); } + socklen_t *fromlenaddr); } 30 STD RUMP { int|sys||accept(int s, struct sockaddr *name, \ - unsigned int *anamelen); } + socklen_t *anamelen); } 31 STD RUMP { int|sys||getpeername(int fdes, struct sockaddr *asa, \ - unsigned int *alen); } + socklen_t *alen); } 32 STD RUMP { int|sys||getsockname(int fdes, struct sockaddr *asa, \ - unsigned int *alen); } + socklen_t *alen); } 33 STD RUMP { int|sys||access(const char *path, int flags); } 34 STD RUMP { int|sys||chflags(const char *path, u_long flags); } 35 STD RUMP { int|sys||fchflags(int fd, u_long flags); } @@ -206,9 +207,9 @@ 96 STD { int|sys||setpriority(int which, id_t who, int prio); } 97 COMPAT_30 MODULAR { int|sys||socket(int domain, int type, int protocol); } 98 STD RUMP { int|sys||connect(int s, const struct sockaddr *name, \ - unsigned int namelen); } + socklen_t namelen); } 99 COMPAT_43 MODULAR { int|sys||accept(int s, void *name, \ - int *anamelen); } oaccept + socklen_t *anamelen); } oaccept 100 STD { int|sys||getpriority(int which, id_t who); } 101 COMPAT_43 MODULAR { int|sys||send(int s, void *buf, int len, \ int flags); } osend @@ -217,9 +218,9 @@ 103 COMPAT_13 MODULAR { int|sys||sigreturn(struct sigcontext13 *sigcntxp); } \ sigreturn13 104 STD RUMP { int|sys||bind(int s, const struct sockaddr *name, \ - unsigned int namelen); } + socklen_t namelen); } 105 STD RUMP { int|sys||setsockopt(int s, int level, int name, \ - const void *val, unsigned int valsize); } + const void *val, socklen_t valsize); } 106 STD RUMP { int|sys||listen(int s, int backlog); } 107 OBSOL vtimes 108 COMPAT_43 MODULAR { int|sys||sigvec(int signum, struct sigvec *nsv, \ @@ -238,7 +239,7 @@ void *tzp); } 117 COMPAT_50 MODULAR { int|sys||getrusage(int who, struct rusage50 *rusage); } 118 STD RUMP { int|sys||getsockopt(int s, int level, int name, \ - void *val, unsigned int *avalsize); } + void *val, socklen_t *avalsize); } 119 OBSOL resuba 120 STD RUMP { ssize_t|sys||readv(int fd, \ const struct iovec *iovp, int iovcnt); } @@ -249,7 +250,7 @@ 123 STD RUMP { int|sys||fchown(int fd, uid_t uid, gid_t gid); } 124 STD RUMP { int|sys||fchmod(int fd, mode_t mode); } 125 COMPAT_43 MODULAR { int|sys||recvfrom(int s, void *buf, size_t len, \ - int flags, void *from, int *fromlenaddr); } \ + int flags, void *from, socklen_t *fromlenaddr); } \ orecvfrom 126 STD RUMP { int|sys||setreuid(uid_t ruid, uid_t euid); } 127 STD RUMP { int|sys||setregid(gid_t rgid, gid_t egid); } @@ -261,7 +262,7 @@ 132 STD RUMP { int|sys||mkfifo(const char *path, mode_t mode); } 133 STD RUMP { ssize_t|sys||sendto(int s, const void *buf, \ size_t len, int flags, const struct sockaddr *to, \ - unsigned int tolen); } + socklen_t tolen); } 134 STD RUMP { int|sys||shutdown(int s, int how); } 135 STD RUMP { int|sys||socketpair(int domain, int type, \ int protocol, int *rsv); } @@ -273,7 +274,7 @@ 140 COMPAT_50 MODULAR { int|sys||adjtime(const struct timeval50 *delta, \ struct timeval50 *olddelta); } 141 COMPAT_43 MODULAR { int|sys||getpeername(int fdes, void *asa, \ - int *alen); } ogetpeername + socklen_t *alen); } ogetpeername 142 COMPAT_43 MODULAR { int32_t|sys||gethostid(void); } ogethostid 143 COMPAT_43 MODULAR { int|sys||sethostid(int32_t hostid); } osethostid 144 COMPAT_43 MODULAR { int|sys||getrlimit(int which, \ @@ -286,7 +287,7 @@ int uid, void *arg); } 149 COMPAT_43 MODULAR { int|sys||quota(void); } oquota 150 COMPAT_43 MODULAR { int|sys||getsockname(int fdec, void *asa, \ - int *alen); } ogetsockname + socklen_t *alen); } ogetsockname ; Syscalls 151-180 inclusive are reserved for vendor-specific ; system calls. (This includes various calls added for compatibity @@ -886,3 +887,9 @@ size_t fh_size, struct stat *sb); } 452 STD RUMP { int|sys|50|quotactl(const char *path, \ struct plistref *pref); } +453 STD RUMP { int|sys||pipe2(int *fildes, int flags); } +454 STD RUMP { int|sys||dup3(int from, int to, int flags); } +455 STD RUMP { int|sys||kqueue1(int flags); } +456 STD RUMP { int|sys||paccept(int s, struct sockaddr *name, \ + socklen_t *anamelen, const sigset_t *mask, \ + int flags); } Index: sys/kern/uipc_socket.c =================================================================== RCS file: /cvsroot/src/sys/kern/uipc_socket.c,v retrieving revision 1.203 diff -u -u -r1.203 uipc_socket.c --- sys/kern/uipc_socket.c 1 Feb 2011 01:39:20 -0000 1.203 +++ sys/kern/uipc_socket.c 25 Jun 2011 21:30:28 -0000 @@ -598,10 +598,13 @@ struct socket *so; struct file *fp; int fd, error; + int flags = type & SOCK_FLAGS_MASK; + type &= ~SOCK_FLAGS_MASK; if ((error = fd_allocfile(&fp, &fd)) != 0) - return (error); - fp->f_flag = FREAD|FWRITE; + return error; + fd_set_exclose(l, fd, (flags & SOCK_CLOEXEC) != 0); + fp->f_flag = FREAD|FWRITE|((flags & SOCK_NONBLOCK) ? FNONBLOCK : 0); fp->f_type = DTYPE_SOCKET; fp->f_ops = &socketops; error = socreate(domain, &so, type, protocol, l, NULL); @@ -1379,7 +1382,9 @@ type == SCM_RIGHTS) { sounlock(so); splx(s); - error = (*dom->dom_externalize)(cm, l); + error = (*dom->dom_externalize)(cm, l, + (flags & MSG_CMSG_CLOEXEC) ? + O_CLOEXEC : 0); s = splsoftnet(); solock(so); } Index: sys/kern/uipc_syscalls.c =================================================================== RCS file: /cvsroot/src/sys/kern/uipc_syscalls.c,v retrieving revision 1.143 diff -u -u -r1.143 uipc_syscalls.c --- sys/kern/uipc_syscalls.c 24 Apr 2011 18:46:23 -0000 1.143 +++ sys/kern/uipc_syscalls.c 25 Jun 2011 21:30:29 -0000 @@ -164,7 +164,8 @@ } int -do_sys_accept(struct lwp *l, int sock, struct mbuf **name, register_t *new_sock) +do_sys_accept(struct lwp *l, int sock, struct mbuf **name, register_t *new_sock, + const sigset_t *mask, int flags, int clrflags) { file_t *fp, *fp2; struct mbuf *nam; @@ -186,6 +187,10 @@ *new_sock = fd; so = fp->f_data; solock(so); + + if (__predict_false(mask)) + sigsuspendsetup(l, mask); + if (!(so->so_proto->pr_flags & PR_LISTEN)) { error = EOPNOTSUPP; goto bad; @@ -224,7 +229,8 @@ if (soqremque(so2, 1) == 0) panic("accept"); fp2->f_type = DTYPE_SOCKET; - fp2->f_flag = fp->f_flag; + fp2->f_flag = (fp->f_flag & ~clrflags) | + ((flags & SOCK_NONBLOCK) ? FNONBLOCK : 0); fp2->f_ops = &socketops; fp2->f_data = so2; error = soaccept(so2, nam); @@ -239,16 +245,21 @@ closef(fp2); fd_abort(curproc, NULL, fd); } else { + fd_set_exclose(l, fd, (flags & SOCK_CLOEXEC) != 0); fd_affix(curproc, fp2, fd); *name = nam; } fd_putfile(sock); + if (__predict_false(mask)) + sigsuspendteardown(l); return (error); bad: sounlock(so); m_freem(nam); fd_putfile(sock); fd_abort(curproc, fp2, fd); + if (__predict_false(mask)) + sigsuspendteardown(l); return (error); } @@ -263,7 +274,46 @@ int error, fd; struct mbuf *name; - error = do_sys_accept(l, SCARG(uap, s), &name, retval); + error = do_sys_accept(l, SCARG(uap, s), &name, retval, NULL, 0, 0); + if (error != 0) + return error; + error = copyout_sockname(SCARG(uap, name), SCARG(uap, anamelen), + MSG_LENUSRSPACE, name); + if (name != NULL) + m_free(name); + if (error != 0) { + fd = (int)*retval; + if (fd_getfile(fd) != NULL) + (void)fd_close(fd); + } + return error; +} + +int +sys_paccept(struct lwp *l, const struct sys_paccept_args *uap, + register_t *retval) +{ + /* { + syscallarg(int) s; + syscallarg(struct sockaddr *) name; + syscallarg(unsigned int *) anamelen; + syscallarg(const sigset_t *) mask; + syscallarg(int) flags; + } */ + int error, fd; + struct mbuf *name; + sigset_t *mask, amask; + + if (SCARG(uap, mask) != NULL) { + error = copyin(SCARG(uap, mask), &amask, sizeof(amask)); + if (error) + return error; + mask = &amask; + } else + mask = NULL; + + error = do_sys_accept(l, SCARG(uap, s), &name, retval, mask, + SCARG(uap, flags), FNONBLOCK); if (error != 0) return error; error = copyout_sockname(SCARG(uap, name), SCARG(uap, anamelen), @@ -364,26 +414,31 @@ struct socket *so1, *so2; int fd, error, sv[2]; proc_t *p; + int flags = SCARG(uap, type) & SOCK_FLAGS_MASK; + int type = SCARG(uap, type) & ~SOCK_FLAGS_MASK; + int fnonblock = (flags & SOCK_NONBLOCK) ? FNONBLOCK : 0; p = curproc; - error = socreate(SCARG(uap, domain), &so1, SCARG(uap, type), + error = socreate(SCARG(uap, domain), &so1, type, SCARG(uap, protocol), l, NULL); if (error) return (error); - error = socreate(SCARG(uap, domain), &so2, SCARG(uap, type), + error = socreate(SCARG(uap, domain), &so2, type, SCARG(uap, protocol), l, so1); if (error) goto free1; if ((error = fd_allocfile(&fp1, &fd)) != 0) goto free2; + fd_set_exclose(l, fd, (flags & SOCK_CLOEXEC) != 0); sv[0] = fd; - fp1->f_flag = FREAD|FWRITE; + fp1->f_flag = FREAD|FWRITE|fnonblock; fp1->f_type = DTYPE_SOCKET; fp1->f_ops = &socketops; fp1->f_data = so1; if ((error = fd_allocfile(&fp2, &fd)) != 0) goto free3; - fp2->f_flag = FREAD|FWRITE; + fd_set_exclose(l, fd, (flags & SOCK_CLOEXEC) != 0); + fp2->f_flag = FREAD|FWRITE|fnonblock; fp2->f_type = DTYPE_SOCKET; fp2->f_ops = &socketops; fp2->f_data = so2; @@ -1006,12 +1061,6 @@ (void)soclose(rso); return (error); } - -int -sys_pipe(struct lwp *l, const void *v, register_t *retval) -{ - return pipe1(l, retval, 0); -} #endif /* PIPE_SOCKETPAIR */ /* Index: sys/kern/uipc_usrreq.c =================================================================== RCS file: /cvsroot/src/sys/kern/uipc_usrreq.c,v retrieving revision 1.135 diff -u -u -r1.135 uipc_usrreq.c --- sys/kern/uipc_usrreq.c 12 Jun 2011 03:35:56 -0000 1.135 +++ sys/kern/uipc_usrreq.c 25 Jun 2011 21:30:30 -0000 @@ -1233,7 +1233,7 @@ #endif int -unp_externalize(struct mbuf *rights, struct lwp *l) +unp_externalize(struct mbuf *rights, struct lwp *l, int flags) { struct cmsghdr *cm = mtod(rights, struct cmsghdr *); struct proc *p = l->l_proc; @@ -1316,9 +1316,11 @@ */ rp = (file_t **)CMSG_DATA(cm); for (i = 0; i < nfds; i++) { + int fd = fdp[i]; fp = *rp++; atomic_dec_uint(&unp_rights); - fd_affix(p, fp, fdp[i]); + fd_set_exclose(l, fd, (flags & O_CLOEXEC) != 0); + fd_affix(p, fp, fd); mutex_enter(&fp->f_lock); fp->f_msgcount--; mutex_exit(&fp->f_lock); Index: sys/rump/include/rump/rump_syscalls.h =================================================================== RCS file: /cvsroot/src/sys/rump/include/rump/rump_syscalls.h,v retrieving revision 1.49 diff -u -u -r1.49 rump_syscalls.h --- sys/rump/include/rump/rump_syscalls.h 8 Mar 2011 18:31:11 -0000 1.49 +++ sys/rump/include/rump/rump_syscalls.h 25 Jun 2011 21:30:37 -0000 @@ -1,10 +1,10 @@ -/* $NetBSD: rump_syscalls.h,v 1.49 2011/03/08 18:31:11 pooka Exp $ */ +/* $NetBSD$ */ /* * System call protos in rump namespace. * * DO NOT EDIT-- this file is automatically generated. - * created from NetBSD: syscalls.master,v 1.246 2011/03/06 17:08:36 bouyer Exp + * created from NetBSD: syscalls.master,v 1.248 2011/03/09 22:12:45 pooka Exp */ #ifndef _RUMP_RUMP_SYSCALLS_H_ @@ -81,6 +81,10 @@ #define RUMP_SYS_RENAME_LISTXATTR rump___sysimpl_listxattr #endif +#ifndef RUMP_SYS_RENAME_PIPE2 +#define RUMP_SYS_RENAME_PIPE2 rump___sysimpl_pipe2 +#endif + #ifndef RUMP_SYS_RENAME_EXTATTR_GET_FD #define RUMP_SYS_RENAME_EXTATTR_GET_FD rump___sysimpl_extattr_get_fd #endif @@ -161,6 +165,10 @@ #define RUMP_SYS_RENAME_EXTATTR_SET_LINK rump___sysimpl_extattr_set_link #endif +#ifndef RUMP_SYS_RENAME_PACCEPT +#define RUMP_SYS_RENAME_PACCEPT rump___sysimpl_paccept +#endif + #ifndef RUMP_SYS_RENAME_EXTATTR_LIST_FILE #define RUMP_SYS_RENAME_EXTATTR_LIST_FILE rump___sysimpl_extattr_list_file #endif @@ -181,6 +189,10 @@ #define RUMP_SYS_RENAME_DUP2 rump___sysimpl_dup2 #endif +#ifndef RUMP_SYS_RENAME_DUP3 +#define RUMP_SYS_RENAME_DUP3 rump___sysimpl_dup3 +#endif + #ifndef RUMP_SYS_RENAME_FHOPEN #define RUMP_SYS_RENAME_FHOPEN rump___sysimpl_fhopen40 #endif @@ -245,6 +257,10 @@ #define RUMP_SYS_RENAME_RMDIR rump___sysimpl_rmdir #endif +#ifndef RUMP_SYS_RENAME_KQUEUE1 +#define RUMP_SYS_RENAME_KQUEUE1 rump___sysimpl_kqueue1 +#endif + #ifndef RUMP_SYS_RENAME_GETGID_WITH_EGID #define RUMP_SYS_RENAME_GETGID_WITH_EGID rump___sysimpl_getgid #endif @@ -655,10 +671,10 @@ uid_t rump_sys_geteuid(void) __RENAME(RUMP_SYS_RENAME_GETEUID); ssize_t rump_sys_recvmsg(int, struct msghdr *, int) __RENAME(RUMP_SYS_RENAME_RECVMSG); ssize_t rump_sys_sendmsg(int, const struct msghdr *, int) __RENAME(RUMP_SYS_RENAME_SENDMSG); -ssize_t rump_sys_recvfrom(int, void *, size_t, int, struct sockaddr *, unsigned int *) __RENAME(RUMP_SYS_RENAME_RECVFROM); -int rump_sys_accept(int, struct sockaddr *, unsigned int *) __RENAME(RUMP_SYS_RENAME_ACCEPT); -int rump_sys_getpeername(int, struct sockaddr *, unsigned int *) __RENAME(RUMP_SYS_RENAME_GETPEERNAME); -int rump_sys_getsockname(int, struct sockaddr *, unsigned int *) __RENAME(RUMP_SYS_RENAME_GETSOCKNAME); +ssize_t rump_sys_recvfrom(int, void *, size_t, int, struct sockaddr *, socklen_t *) __RENAME(RUMP_SYS_RENAME_RECVFROM); +int rump_sys_accept(int, struct sockaddr *, socklen_t *) __RENAME(RUMP_SYS_RENAME_ACCEPT); +int rump_sys_getpeername(int, struct sockaddr *, socklen_t *) __RENAME(RUMP_SYS_RENAME_GETPEERNAME); +int rump_sys_getsockname(int, struct sockaddr *, socklen_t *) __RENAME(RUMP_SYS_RENAME_GETSOCKNAME); int rump_sys_access(const char *, int) __RENAME(RUMP_SYS_RENAME_ACCESS); int rump_sys_chflags(const char *, u_long) __RENAME(RUMP_SYS_RENAME_CHFLAGS); int rump_sys_fchflags(int, u_long) __RENAME(RUMP_SYS_RENAME_FCHFLAGS); @@ -683,11 +699,11 @@ int rump_sys_fcntl(int, int, ...) __RENAME(RUMP_SYS_RENAME_FCNTL); int rump_sys_select(int, fd_set *, fd_set *, fd_set *, struct timeval *) __RENAME(RUMP_SYS_RENAME_SELECT); int rump_sys_fsync(int) __RENAME(RUMP_SYS_RENAME_FSYNC); -int rump_sys_connect(int, const struct sockaddr *, unsigned int) __RENAME(RUMP_SYS_RENAME_CONNECT); -int rump_sys_bind(int, const struct sockaddr *, unsigned int) __RENAME(RUMP_SYS_RENAME_BIND); -int rump_sys_setsockopt(int, int, int, const void *, unsigned int) __RENAME(RUMP_SYS_RENAME_SETSOCKOPT); +int rump_sys_connect(int, const struct sockaddr *, socklen_t) __RENAME(RUMP_SYS_RENAME_CONNECT); +int rump_sys_bind(int, const struct sockaddr *, socklen_t) __RENAME(RUMP_SYS_RENAME_BIND); +int rump_sys_setsockopt(int, int, int, const void *, socklen_t) __RENAME(RUMP_SYS_RENAME_SETSOCKOPT); int rump_sys_listen(int, int) __RENAME(RUMP_SYS_RENAME_LISTEN); -int rump_sys_getsockopt(int, int, int, void *, unsigned int *) __RENAME(RUMP_SYS_RENAME_GETSOCKOPT); +int rump_sys_getsockopt(int, int, int, void *, socklen_t *) __RENAME(RUMP_SYS_RENAME_GETSOCKOPT); ssize_t rump_sys_readv(int, const struct iovec *, int) __RENAME(RUMP_SYS_RENAME_READV); ssize_t rump_sys_writev(int, const struct iovec *, int) __RENAME(RUMP_SYS_RENAME_WRITEV); int rump_sys_fchown(int, uid_t, gid_t) __RENAME(RUMP_SYS_RENAME_FCHOWN); @@ -697,7 +713,7 @@ int rump_sys_rename(const char *, const char *) __RENAME(RUMP_SYS_RENAME_RENAME); int rump_sys_flock(int, int) __RENAME(RUMP_SYS_RENAME_FLOCK); int rump_sys_mkfifo(const char *, mode_t) __RENAME(RUMP_SYS_RENAME_MKFIFO); -ssize_t rump_sys_sendto(int, const void *, size_t, int, const struct sockaddr *, unsigned int) __RENAME(RUMP_SYS_RENAME_SENDTO); +ssize_t rump_sys_sendto(int, const void *, size_t, int, const struct sockaddr *, socklen_t) __RENAME(RUMP_SYS_RENAME_SENDTO); int rump_sys_shutdown(int, int) __RENAME(RUMP_SYS_RENAME_SHUTDOWN); int rump_sys_socketpair(int, int, int, int *) __RENAME(RUMP_SYS_RENAME_SOCKETPAIR); int rump_sys_mkdir(const char *, mode_t) __RENAME(RUMP_SYS_RENAME_MKDIR); @@ -788,6 +804,10 @@ int rump_sys_mount(const char *, const char *, int, void *, size_t) __RENAME(RUMP_SYS_RENAME_MOUNT); int rump_sys_posix_fadvise(int, off_t, off_t, int) __RENAME(RUMP_SYS_RENAME_POSIX_FADVISE); int rump_sys_quotactl(const char *, struct plistref *) __RENAME(RUMP_SYS_RENAME_QUOTACTL); +int rump_sys_pipe2(int *, int) __RENAME(RUMP_SYS_RENAME_PIPE2); +int rump_sys_dup3(int, int, int) __RENAME(RUMP_SYS_RENAME_DUP3); +int rump_sys_kqueue1(int) __RENAME(RUMP_SYS_RENAME_KQUEUE1); +int rump_sys_paccept(int, struct sockaddr *, socklen_t *, const sigset_t *, int) __RENAME(RUMP_SYS_RENAME_PACCEPT); int rump_sys_pipe(int *); #endif /* _RUMP_RUMP_SYSCALLS_H_ */ Index: sys/rump/librump/rumpkern/rump_syscalls.c =================================================================== RCS file: /cvsroot/src/sys/rump/librump/rumpkern/rump_syscalls.c,v retrieving revision 1.71 diff -u -u -r1.71 rump_syscalls.c --- sys/rump/librump/rumpkern/rump_syscalls.c 8 Mar 2011 18:31:11 -0000 1.71 +++ sys/rump/librump/rumpkern/rump_syscalls.c 25 Jun 2011 21:30:40 -0000 @@ -1,14 +1,14 @@ -/* $NetBSD: rump_syscalls.c,v 1.71 2011/03/08 18:31:11 pooka Exp $ */ +/* $NetBSD$ */ /* * System call vector and marshalling for rump. * * DO NOT EDIT-- this file is automatically generated. - * created from NetBSD: syscalls.master,v 1.246 2011/03/06 17:08:36 bouyer Exp + * created from NetBSD: syscalls.master,v 1.248 2011/03/09 22:12:45 pooka Exp */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rump_syscalls.c,v 1.71 2011/03/08 18:31:11 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD$"); #include <sys/param.h> #include <sys/fstypes.h> @@ -478,9 +478,9 @@ } rsys_alias(sys_sendmsg,rump_enosys) -ssize_t rump___sysimpl_recvfrom(int, void *, size_t, int, struct sockaddr *, unsigned int *); +ssize_t rump___sysimpl_recvfrom(int, void *, size_t, int, struct sockaddr *, socklen_t *); ssize_t -rump___sysimpl_recvfrom(int s, void * buf, size_t len, int flags, struct sockaddr * from, unsigned int * fromlenaddr) +rump___sysimpl_recvfrom(int s, void * buf, size_t len, int flags, struct sockaddr * from, socklen_t * fromlenaddr) { register_t retval[2] = {0, 0}; int error = 0; @@ -506,9 +506,9 @@ } rsys_alias(sys_recvfrom,rump_enosys) -int rump___sysimpl_accept(int, struct sockaddr *, unsigned int *); +int rump___sysimpl_accept(int, struct sockaddr *, socklen_t *); int -rump___sysimpl_accept(int s, struct sockaddr * name, unsigned int * anamelen) +rump___sysimpl_accept(int s, struct sockaddr * name, socklen_t * anamelen) { register_t retval[2] = {0, 0}; int error = 0; @@ -531,9 +531,9 @@ } rsys_alias(sys_accept,rump_enosys) -int rump___sysimpl_getpeername(int, struct sockaddr *, unsigned int *); +int rump___sysimpl_getpeername(int, struct sockaddr *, socklen_t *); int -rump___sysimpl_getpeername(int fdes, struct sockaddr * asa, unsigned int * alen) +rump___sysimpl_getpeername(int fdes, struct sockaddr * asa, socklen_t * alen) { register_t retval[2] = {0, 0}; int error = 0; @@ -556,9 +556,9 @@ } rsys_alias(sys_getpeername,rump_enosys) -int rump___sysimpl_getsockname(int, struct sockaddr *, unsigned int *); +int rump___sysimpl_getsockname(int, struct sockaddr *, socklen_t *); int -rump___sysimpl_getsockname(int fdes, struct sockaddr * asa, unsigned int * alen) +rump___sysimpl_getsockname(int fdes, struct sockaddr * asa, socklen_t * alen) { register_t retval[2] = {0, 0}; int error = 0; @@ -1115,9 +1115,9 @@ } rsys_alias(sys_fsync,rump_enosys) -int rump___sysimpl_connect(int, const struct sockaddr *, unsigned int); +int rump___sysimpl_connect(int, const struct sockaddr *, socklen_t); int -rump___sysimpl_connect(int s, const struct sockaddr * name, unsigned int namelen) +rump___sysimpl_connect(int s, const struct sockaddr * name, socklen_t namelen) { register_t retval[2] = {0, 0}; int error = 0; @@ -1140,9 +1140,9 @@ } rsys_alias(sys_connect,rump_enosys) -int rump___sysimpl_bind(int, const struct sockaddr *, unsigned int); +int rump___sysimpl_bind(int, const struct sockaddr *, socklen_t); int -rump___sysimpl_bind(int s, const struct sockaddr * name, unsigned int namelen) +rump___sysimpl_bind(int s, const struct sockaddr * name, socklen_t namelen) { register_t retval[2] = {0, 0}; int error = 0; @@ -1165,9 +1165,9 @@ } rsys_alias(sys_bind,rump_enosys) -int rump___sysimpl_setsockopt(int, int, int, const void *, unsigned int); +int rump___sysimpl_setsockopt(int, int, int, const void *, socklen_t); int -rump___sysimpl_setsockopt(int s, int level, int name, const void * val, unsigned int valsize) +rump___sysimpl_setsockopt(int s, int level, int name, const void * val, socklen_t valsize) { register_t retval[2] = {0, 0}; int error = 0; @@ -1216,9 +1216,9 @@ } rsys_alias(sys_listen,rump_enosys) -int rump___sysimpl_getsockopt(int, int, int, void *, unsigned int *); +int rump___sysimpl_getsockopt(int, int, int, void *, socklen_t *); int -rump___sysimpl_getsockopt(int s, int level, int name, void * val, unsigned int * avalsize) +rump___sysimpl_getsockopt(int s, int level, int name, void * val, socklen_t * avalsize) { register_t retval[2] = {0, 0}; int error = 0; @@ -1462,9 +1462,9 @@ } rsys_alias(sys_mkfifo,rump_enosys) -ssize_t rump___sysimpl_sendto(int, const void *, size_t, int, const struct sockaddr *, unsigned int); +ssize_t rump___sysimpl_sendto(int, const void *, size_t, int, const struct sockaddr *, socklen_t); ssize_t -rump___sysimpl_sendto(int s, const void * buf, size_t len, int flags, const struct sockaddr * to, unsigned int tolen) +rump___sysimpl_sendto(int s, const void * buf, size_t len, int flags, const struct sockaddr * to, socklen_t tolen) { register_t retval[2] = {0, 0}; int error = 0; @@ -4022,6 +4022,105 @@ } rsys_alias(sys___quotactl50,rump_enosys) +int rump___sysimpl_pipe2(int *, int); +int +rump___sysimpl_pipe2(int * fildes, int flags) +{ + register_t retval[2] = {0, 0}; + int error = 0; + int rv = -1; + struct sys_pipe2_args callarg; + + SPARG(&callarg, fildes) = fildes; + SPARG(&callarg, flags) = flags; + + error = rsys_syscall(SYS_pipe2, &callarg, sizeof(callarg), retval); + rsys_seterrno(error); + if (error == 0) { + if (sizeof(int) > sizeof(register_t)) + rv = *(int *)retval; + else + rv = *retval; + } + return rv; +} +rsys_alias(sys_pipe2,rump_enosys) + +int rump___sysimpl_dup3(int, int, int); +int +rump___sysimpl_dup3(int from, int to, int flags) +{ + register_t retval[2] = {0, 0}; + int error = 0; + int rv = -1; + struct sys_dup3_args callarg; + + SPARG(&callarg, from) = from; + SPARG(&callarg, to) = to; + SPARG(&callarg, flags) = flags; + + error = rsys_syscall(SYS_dup3, &callarg, sizeof(callarg), retval); + rsys_seterrno(error); + if (error == 0) { + if (sizeof(int) > sizeof(register_t)) + rv = *(int *)retval; + else + rv = *retval; + } + return rv; +} +rsys_alias(sys_dup3,rump_enosys) + +int rump___sysimpl_kqueue1(int); +int +rump___sysimpl_kqueue1(int flags) +{ + register_t retval[2] = {0, 0}; + int error = 0; + int rv = -1; + struct sys_kqueue1_args callarg; + + SPARG(&callarg, flags) = flags; + + error = rsys_syscall(SYS_kqueue1, &callarg, sizeof(callarg), retval); + rsys_seterrno(error); + if (error == 0) { + if (sizeof(int) > sizeof(register_t)) + rv = *(int *)retval; + else + rv = *retval; + } + return rv; +} +rsys_alias(sys_kqueue1,rump_enosys) + +int rump___sysimpl_paccept(int, struct sockaddr *, socklen_t *, const sigset_t *, int); +int +rump___sysimpl_paccept(int s, struct sockaddr * name, socklen_t * anamelen, const sigset_t * mask, int flags) +{ + register_t retval[2] = {0, 0}; + int error = 0; + int rv = -1; + struct sys_paccept_args callarg; + + SPARG(&callarg, s) = s; + SPARG(&callarg, name) = name; + SPARG(&callarg, anamelen) = anamelen; + SPARG(&callarg, mask) = mask; + SPARG(&callarg, flags) = flags; + + error = rsys_syscall(SYS_paccept, &callarg, sizeof(callarg), retval); + rsys_seterrno(error); + if (error == 0) { + if (sizeof(int) > sizeof(register_t)) + rv = *(int *)retval; + else + rv = *retval; + } + return rv; +} +rsys_alias(sys_paccept,rump_enosys) + int rump_sys_pipe(int *); int rump_sys_pipe(int *fd) @@ -5039,14 +5138,14 @@ (sy_call_t *)sys___fhstat50 }, /* 451 = __fhstat50 */ { ns(struct sys___quotactl50_args), 0, (sy_call_t *)sys___quotactl50 }, /* 452 = __quotactl50 */ - { 0, 0, SYCALL_NOSYS, - (sy_call_t *)rump_enosys }, /* 453 = filler */ - { 0, 0, SYCALL_NOSYS, - (sy_call_t *)rump_enosys }, /* 454 = filler */ - { 0, 0, SYCALL_NOSYS, - (sy_call_t *)rump_enosys }, /* 455 = filler */ - { 0, 0, SYCALL_NOSYS, - (sy_call_t *)rump_enosys }, /* 456 = filler */ + { ns(struct sys_pipe2_args), 0, + (sy_call_t *)sys_pipe2 }, /* 453 = pipe2 */ + { ns(struct sys_dup3_args), 0, + (sy_call_t *)sys_dup3 }, /* 454 = dup3 */ + { ns(struct sys_kqueue1_args), 0, + (sy_call_t *)sys_kqueue1 }, /* 455 = kqueue1 */ + { ns(struct sys_paccept_args), 0, + (sy_call_t *)sys_paccept }, /* 456 = paccept */ { 0, 0, SYCALL_NOSYS, (sy_call_t *)rump_enosys }, /* 457 = filler */ { 0, 0, SYCALL_NOSYS, Index: sys/sys/domain.h =================================================================== RCS file: /cvsroot/src/sys/sys/domain.h,v retrieving revision 1.30 diff -u -u -r1.30 domain.h --- sys/sys/domain.h 31 Mar 2011 19:40:54 -0000 1.30 +++ sys/sys/domain.h 25 Jun 2011 21:30:41 -0000 @@ -58,7 +58,7 @@ void (*dom_init) /* initialize domain data structures */ (void); int (*dom_externalize) /* externalize access rights */ - (struct mbuf *, struct lwp *); + (struct mbuf *, struct lwp *, int); void (*dom_dispose) /* dispose of internalized rights */ (struct mbuf *); const struct protosw *dom_protosw, *dom_protoswNPROTOSW; Index: sys/sys/event.h =================================================================== RCS file: /cvsroot/src/sys/sys/event.h,v retrieving revision 1.22 diff -u -u -r1.22 event.h --- sys/sys/event.h 24 Apr 2011 18:46:24 -0000 1.22 +++ sys/sys/event.h 25 Jun 2011 21:30:41 -0000 @@ -246,6 +246,7 @@ __BEGIN_DECLS #if defined(_NETBSD_SOURCE) int kqueue(void); +int kqueue1(int); #ifndef __LIBC12_SOURCE__ int kevent(int, const struct kevent *, size_t, struct kevent *, size_t, const struct timespec *) __RENAME(__kevent50); Index: sys/sys/fcntl.h =================================================================== RCS file: /cvsroot/src/sys/sys/fcntl.h,v retrieving revision 1.37 diff -u -u -r1.37 fcntl.h --- sys/sys/fcntl.h 10 Apr 2011 15:45:33 -0000 1.37 +++ sys/sys/fcntl.h 25 Jun 2011 21:30:42 -0000 @@ -180,6 +180,7 @@ #if defined(_NETBSD_SOURCE) #define F_CLOSEM 10 /* close all fds >= to the one given */ #define F_MAXFD 11 /* return the max open fd */ +#define F_DUPFD_CLOEXEC 12 /* close on exec duplicated fd */ #endif /* file descriptor flags (F_GETFD, F_SETFD) */ Index: sys/sys/filedesc.h =================================================================== RCS file: /cvsroot/src/sys/sys/filedesc.h,v retrieving revision 1.60 diff -u -u -r1.60 filedesc.h --- sys/sys/filedesc.h 1 Jun 2011 21:25:02 -0000 1.60 +++ sys/sys/filedesc.h 25 Jun 2011 21:30:42 -0000 @@ -204,7 +204,7 @@ void fd_putsock(unsigned); int fd_close(unsigned); int fd_dup(file_t *, int, int *, bool); -int fd_dup2(file_t *, unsigned); +int fd_dup2(file_t *, unsigned, int); int fd_clone(file_t *, unsigned, int, const struct fileops *, void *); void fd_set_exclose(struct lwp *, int, bool); int pipe1(struct lwp *, register_t *, int); Index: sys/sys/socket.h =================================================================== RCS file: /cvsroot/src/sys/sys/socket.h,v retrieving revision 1.99 diff -u -u -r1.99 socket.h --- sys/sys/socket.h 1 Feb 2011 01:39:21 -0000 1.99 +++ sys/sys/socket.h 25 Jun 2011 21:30:42 -0000 @@ -97,6 +97,7 @@ #endif #include <sys/uio.h> +#include <sys/sigtypes.h> /* * Socket types. @@ -107,6 +108,10 @@ #define SOCK_RDM 4 /* reliably-delivered message */ #define SOCK_SEQPACKET 5 /* sequenced packet stream */ +#define SOCK_CLOEXEC 0x10000000 /* set close on exec on socket */ +#define SOCK_NONBLOCK 0x20000000 /* set non blocking i/o socket */ +#define SOCK_FLAGS_MASK 0xf0000000 /* flags mask */ + /* * Option flags per-socket. */ @@ -485,6 +490,9 @@ #define MSG_BCAST 0x0100 /* this message was rcvd using link-level brdcst */ #define MSG_MCAST 0x0200 /* this message was rcvd using link-level mcast */ #define MSG_NOSIGNAL 0x0400 /* do not generate SIGPIPE on EOF */ +#if defined(_NETBSD_SOURCE) +#define MSG_CMSG_CLOEXEC 0x0800 /* close on exec receiving fd */ +#endif /* Extra flags used internally only */ #define MSG_USERFLAGS 0x0ffffff @@ -603,6 +611,8 @@ int getsockname(int, struct sockaddr * __restrict, socklen_t * __restrict); int getsockopt(int, int, int, void *__restrict, socklen_t * __restrict); int listen(int, int); +int paccept(int, struct sockaddr * __restrict, socklen_t * __restrict, + const sigset_t * __restrict, int); ssize_t recv(int, void *, size_t, int); ssize_t recvfrom(int, void *__restrict, size_t, int, struct sockaddr * __restrict, socklen_t * __restrict); Index: sys/sys/socketvar.h =================================================================== RCS file: /cvsroot/src/sys/sys/socketvar.h,v retrieving revision 1.124 diff -u -u -r1.124 socketvar.h --- sys/sys/socketvar.h 29 Dec 2009 04:23:43 -0000 1.124 +++ sys/sys/socketvar.h 25 Jun 2011 21:30:43 -0000 @@ -350,7 +350,8 @@ int do_sys_bind(struct lwp *, int, struct mbuf *); int do_sys_connect(struct lwp *, int, struct mbuf *); -int do_sys_accept(struct lwp *, int, struct mbuf **, register_t *); +int do_sys_accept(struct lwp *, int, struct mbuf **, register_t *, + const sigset_t *, int, int); /* * Inline functions for sockets and socket buffering. Index: sys/sys/syscall.h =================================================================== RCS file: /cvsroot/src/sys/sys/syscall.h,v retrieving revision 1.241 diff -u -u -r1.241 syscall.h --- sys/sys/syscall.h 6 Mar 2011 17:08:38 -0000 1.241 +++ sys/sys/syscall.h 25 Jun 2011 21:30:43 -0000 @@ -1,10 +1,10 @@ -/* $NetBSD: syscall.h,v 1.241 2011/03/06 17:08:38 bouyer Exp $ */ +/* $NetBSD$ */ /* * System call numbers. * * DO NOT EDIT-- this file is automatically generated. - * created from NetBSD + * created from NetBSD: syscalls.master,v 1.248 2011/03/09 22:12:45 pooka Exp */ #ifndef _SYS_SYSCALL_H_ @@ -97,16 +97,16 @@ /* syscall: "sendmsg" ret: "ssize_t" args: "int" "const struct msghdr *" "int" */ #define SYS_sendmsg 28 -/* syscall: "recvfrom" ret: "ssize_t" args: "int" "void *" "size_t" "int" "struct sockaddr *" "unsigned int *" */ +/* syscall: "recvfrom" ret: "ssize_t" args: "int" "void *" "size_t" "int" "struct sockaddr *" "socklen_t *" */ #define SYS_recvfrom 29 -/* syscall: "accept" ret: "int" args: "int" "struct sockaddr *" "unsigned int *" */ +/* syscall: "accept" ret: "int" args: "int" "struct sockaddr *" "socklen_t *" */ #define SYS_accept 30 -/* syscall: "getpeername" ret: "int" args: "int" "struct sockaddr *" "unsigned int *" */ +/* syscall: "getpeername" ret: "int" args: "int" "struct sockaddr *" "socklen_t *" */ #define SYS_getpeername 31 -/* syscall: "getsockname" ret: "int" args: "int" "struct sockaddr *" "unsigned int *" */ +/* syscall: "getsockname" ret: "int" args: "int" "struct sockaddr *" "socklen_t *" */ #define SYS_getsockname 32 /* syscall: "access" ret: "int" args: "const char *" "int" */ @@ -290,10 +290,10 @@ /* syscall: "compat_30_socket" ret: "int" args: "int" "int" "int" */ #define SYS_compat_30_socket 97 -/* syscall: "connect" ret: "int" args: "int" "const struct sockaddr *" "unsigned int" */ +/* syscall: "connect" ret: "int" args: "int" "const struct sockaddr *" "socklen_t" */ #define SYS_connect 98 -/* syscall: "compat_43_oaccept" ret: "int" args: "int" "void *" "int *" */ +/* syscall: "compat_43_oaccept" ret: "int" args: "int" "void *" "socklen_t *" */ #define SYS_compat_43_oaccept 99 /* syscall: "getpriority" ret: "int" args: "int" "id_t" */ @@ -308,10 +308,10 @@ /* syscall: "compat_13_sigreturn13" ret: "int" args: "struct sigcontext13 *" */ #define SYS_compat_13_sigreturn13 103 -/* syscall: "bind" ret: "int" args: "int" "const struct sockaddr *" "unsigned int" */ +/* syscall: "bind" ret: "int" args: "int" "const struct sockaddr *" "socklen_t" */ #define SYS_bind 104 -/* syscall: "setsockopt" ret: "int" args: "int" "int" "int" "const void *" "unsigned int" */ +/* syscall: "setsockopt" ret: "int" args: "int" "int" "int" "const void *" "socklen_t" */ #define SYS_setsockopt 105 /* syscall: "listen" ret: "int" args: "int" "int" */ @@ -346,7 +346,7 @@ /* syscall: "compat_50_getrusage" ret: "int" args: "int" "struct rusage50 *" */ #define SYS_compat_50_getrusage 117 -/* syscall: "getsockopt" ret: "int" args: "int" "int" "int" "void *" "unsigned int *" */ +/* syscall: "getsockopt" ret: "int" args: "int" "int" "int" "void *" "socklen_t *" */ #define SYS_getsockopt 118 /* 119 is obsolete resuba */ @@ -365,7 +365,7 @@ /* syscall: "fchmod" ret: "int" args: "int" "mode_t" */ #define SYS_fchmod 124 -/* syscall: "compat_43_orecvfrom" ret: "int" args: "int" "void *" "size_t" "int" "void *" "int *" */ +/* syscall: "compat_43_orecvfrom" ret: "int" args: "int" "void *" "size_t" "int" "void *" "socklen_t *" */ #define SYS_compat_43_orecvfrom 125 /* syscall: "setreuid" ret: "int" args: "uid_t" "uid_t" */ @@ -389,7 +389,7 @@ /* syscall: "mkfifo" ret: "int" args: "const char *" "mode_t" */ #define SYS_mkfifo 132 -/* syscall: "sendto" ret: "ssize_t" args: "int" "const void *" "size_t" "int" "const struct sockaddr *" "unsigned int" */ +/* syscall: "sendto" ret: "ssize_t" args: "int" "const void *" "size_t" "int" "const struct sockaddr *" "socklen_t" */ #define SYS_sendto 133 /* syscall: "shutdown" ret: "int" args: "int" "int" */ @@ -411,7 +411,7 @@ /* syscall: "compat_50_adjtime" ret: "int" args: "const struct timeval50 *" "struct timeval50 *" */ #define SYS_compat_50_adjtime 140 -/* syscall: "compat_43_ogetpeername" ret: "int" args: "int" "void *" "int *" */ +/* syscall: "compat_43_ogetpeername" ret: "int" args: "int" "void *" "socklen_t *" */ #define SYS_compat_43_ogetpeername 141 /* syscall: "compat_43_ogethostid" ret: "int32_t" args: */ @@ -438,7 +438,7 @@ /* syscall: "compat_43_oquota" ret: "int" args: */ #define SYS_compat_43_oquota 149 -/* syscall: "compat_43_ogetsockname" ret: "int" args: "int" "void *" "int *" */ +/* syscall: "compat_43_ogetsockname" ret: "int" args: "int" "void *" "socklen_t *" */ #define SYS_compat_43_ogetsockname 150 /* syscall: "nfssvc" ret: "int" args: "int" "void *" */ @@ -1282,6 +1282,18 @@ /* syscall: "__quotactl50" ret: "int" args: "const char *" "struct plistref *" */ #define SYS___quotactl50 452 -#define SYS_MAXSYSCALL 453 +/* syscall: "pipe2" ret: "int" args: "int *" "int" */ +#define SYS_pipe2 453 + +/* syscall: "dup3" ret: "int" args: "int" "int" "int" */ +#define SYS_dup3 454 + +/* syscall: "kqueue1" ret: "int" args: "int" */ +#define SYS_kqueue1 455 + +/* syscall: "paccept" ret: "int" args: "int" "struct sockaddr *" "socklen_t *" "const sigset_t *" "int" */ +#define SYS_paccept 456 + +#define SYS_MAXSYSCALL 457 #define SYS_NSYSENT 512 #endif /* _SYS_SYSCALL_H_ */ Index: sys/sys/syscallargs.h =================================================================== RCS file: /cvsroot/src/sys/sys/syscallargs.h,v retrieving revision 1.224 diff -u -u -r1.224 syscallargs.h --- sys/sys/syscallargs.h 6 Mar 2011 17:08:38 -0000 1.224 +++ sys/sys/syscallargs.h 25 Jun 2011 21:30:45 -0000 @@ -1,10 +1,10 @@ -/* $NetBSD: syscallargs.h,v 1.224 2011/03/06 17:08:38 bouyer Exp $ */ +/* $NetBSD$ */ /* * System call argument lists. * * DO NOT EDIT-- this file is automatically generated. - * created from NetBSD + * created from NetBSD: syscalls.master,v 1.248 2011/03/09 22:12:45 pooka Exp */ #ifndef _SYS_SYSCALLARGS_H_ @@ -12,6 +12,7 @@ #include <sys/mount.h> #include <sys/sched.h> +#include <sys/socket.h> #define SYS_MAXSYSARGS 8 @@ -191,28 +192,28 @@ syscallarg(size_t) len; syscallarg(int) flags; syscallarg(struct sockaddr *) from; - syscallarg(unsigned int *) fromlenaddr; + syscallarg(socklen_t *) fromlenaddr; }; check_syscall_args(sys_recvfrom) struct sys_accept_args { syscallarg(int) s; syscallarg(struct sockaddr *) name; - syscallarg(unsigned int *) anamelen; + syscallarg(socklen_t *) anamelen; }; check_syscall_args(sys_accept) struct sys_getpeername_args { syscallarg(int) fdes; syscallarg(struct sockaddr *) asa; - syscallarg(unsigned int *) alen; + syscallarg(socklen_t *) alen; }; check_syscall_args(sys_getpeername) struct sys_getsockname_args { syscallarg(int) fdes; syscallarg(struct sockaddr *) asa; - syscallarg(unsigned int *) alen; + syscallarg(socklen_t *) alen; }; check_syscall_args(sys_getsockname) @@ -519,14 +520,14 @@ struct sys_connect_args { syscallarg(int) s; syscallarg(const struct sockaddr *) name; - syscallarg(unsigned int) namelen; + syscallarg(socklen_t) namelen; }; check_syscall_args(sys_connect) struct compat_43_sys_accept_args { syscallarg(int) s; syscallarg(void *) name; - syscallarg(int *) anamelen; + syscallarg(socklen_t *) anamelen; }; check_syscall_args(compat_43_sys_accept) @@ -560,7 +561,7 @@ struct sys_bind_args { syscallarg(int) s; syscallarg(const struct sockaddr *) name; - syscallarg(unsigned int) namelen; + syscallarg(socklen_t) namelen; }; check_syscall_args(sys_bind) @@ -569,7 +570,7 @@ syscallarg(int) level; syscallarg(int) name; syscallarg(const void *) val; - syscallarg(unsigned int) valsize; + syscallarg(socklen_t) valsize; }; check_syscall_args(sys_setsockopt) @@ -638,7 +639,7 @@ syscallarg(int) level; syscallarg(int) name; syscallarg(void *) val; - syscallarg(unsigned int *) avalsize; + syscallarg(socklen_t *) avalsize; }; check_syscall_args(sys_getsockopt) @@ -681,7 +682,7 @@ syscallarg(size_t) len; syscallarg(int) flags; syscallarg(void *) from; - syscallarg(int *) fromlenaddr; + syscallarg(socklen_t *) fromlenaddr; }; check_syscall_args(compat_43_sys_recvfrom) @@ -733,7 +734,7 @@ syscallarg(size_t) len; syscallarg(int) flags; syscallarg(const struct sockaddr *) to; - syscallarg(unsigned int) tolen; + syscallarg(socklen_t) tolen; }; check_syscall_args(sys_sendto) @@ -777,7 +778,7 @@ struct compat_43_sys_getpeername_args { syscallarg(int) fdes; syscallarg(void *) asa; - syscallarg(int *) alen; + syscallarg(socklen_t *) alen; }; check_syscall_args(compat_43_sys_getpeername) @@ -815,7 +816,7 @@ struct compat_43_sys_getsockname_args { syscallarg(int) fdec; syscallarg(void *) asa; - syscallarg(int *) alen; + syscallarg(socklen_t *) alen; }; check_syscall_args(compat_43_sys_getsockname) @@ -2537,6 +2538,33 @@ }; check_syscall_args(sys___quotactl50) +struct sys_pipe2_args { + syscallarg(int *) fildes; + syscallarg(int) flags; +}; +check_syscall_args(sys_pipe2) + +struct sys_dup3_args { + syscallarg(int) from; + syscallarg(int) to; + syscallarg(int) flags; +}; +check_syscall_args(sys_dup3) + +struct sys_kqueue1_args { + syscallarg(int) flags; +}; +check_syscall_args(sys_kqueue1) + +struct sys_paccept_args { + syscallarg(int) s; + syscallarg(struct sockaddr *) name; + syscallarg(socklen_t *) anamelen; + syscallarg(const sigset_t *) mask; + syscallarg(int) flags; +}; +check_syscall_args(sys_paccept) + /* * System call prototypes. */ @@ -3379,4 +3407,12 @@ int sys___quotactl50(struct lwp *, const struct sys___quotactl50_args *, register_t *); +int sys_pipe2(struct lwp *, const struct sys_pipe2_args *, register_t *); + +int sys_dup3(struct lwp *, const struct sys_dup3_args *, register_t *); + +int sys_kqueue1(struct lwp *, const struct sys_kqueue1_args *, register_t *); + +int sys_paccept(struct lwp *, const struct sys_paccept_args *, register_t *); + #endif /* _SYS_SYSCALLARGS_H_ */ Index: sys/sys/un.h =================================================================== RCS file: /cvsroot/src/sys/sys/un.h,v retrieving revision 1.45 diff -u -u -r1.45 un.h --- sys/sys/un.h 11 Mar 2009 06:05:30 -0000 1.45 +++ sys/sys/un.h 25 Jun 2011 21:30:45 -0000 @@ -92,7 +92,7 @@ void unp_disconnect (struct unpcb *); bool unp_drop (struct unpcb *, int); void unp_shutdown (struct unpcb *); -int unp_externalize (struct mbuf *, struct lwp *); +int unp_externalize (struct mbuf *, struct lwp *, int); int unp_internalize (struct mbuf **); void unp_dispose (struct mbuf *); int unp_output (struct mbuf *, struct mbuf *, struct unpcb *,