Author: ed
Date: Tue Sep 5 07:46:45 2017
New Revision: 323177
URL: https://svnweb.freebsd.org/changeset/base/323177
Log:
Merge pipes and socket pairs.
Now that CloudABI's sockets API has been changed to be addressless and
only connected socket instances are used (e.g., socket pairs), they have
become fairly similar to pipes. The only differences on CloudABI is that
socket pairs additionally support shutdown(), send() and recv().
To simplify the ABI, we've therefore decided to remove pipes as a
separate file descriptor type and just let pipe() return a socket pair
of type SOCK_STREAM. S_ISFIFO() and S_ISSOCK() are now defined
identically.
Modified:
head/sys/compat/cloudabi/cloudabi_fd.c
head/sys/compat/cloudabi/cloudabi_file.c
head/sys/contrib/cloudabi/cloudabi_types_common.h
head/usr.bin/truss/syscalls.c
Modified: head/sys/compat/cloudabi/cloudabi_fd.c
==
--- head/sys/compat/cloudabi/cloudabi_fd.c Tue Sep 5 06:20:02 2017
(r323176)
+++ head/sys/compat/cloudabi/cloudabi_fd.c Tue Sep 5 07:46:45 2017
(r323177)
@@ -56,7 +56,6 @@ __FBSDID("$FreeBSD$");
MAPPING(CLOUDABI_RIGHT_FILE_ALLOCATE, CAP_WRITE)\
MAPPING(CLOUDABI_RIGHT_FILE_CREATE_DIRECTORY, CAP_MKDIRAT) \
MAPPING(CLOUDABI_RIGHT_FILE_CREATE_FILE, CAP_CREATE)\
- MAPPING(CLOUDABI_RIGHT_FILE_CREATE_FIFO, CAP_MKFIFOAT) \
MAPPING(CLOUDABI_RIGHT_FILE_LINK_SOURCE, CAP_LINKAT_SOURCE) \
MAPPING(CLOUDABI_RIGHT_FILE_LINK_TARGET, CAP_LINKAT_TARGET) \
MAPPING(CLOUDABI_RIGHT_FILE_OPEN, CAP_LOOKUP) \
@@ -110,34 +109,21 @@ int
cloudabi_sys_fd_create2(struct thread *td,
struct cloudabi_sys_fd_create2_args *uap)
{
- struct filecaps fcaps1 = {}, fcaps2 = {};
int fds[2];
- int error;
+ int error, type;
switch (uap->type) {
- case CLOUDABI_FILETYPE_FIFO:
- /*
-* CloudABI pipes are unidirectional. Restrict rights on
-* the pipe to simulate this.
-*/
- cap_rights_init(_rights, CAP_EVENT, CAP_FCNTL,
- CAP_FSTAT, CAP_READ);
- fcaps1.fc_fcntls = CAP_FCNTL_SETFL;
- cap_rights_init(_rights, CAP_EVENT, CAP_FCNTL,
- CAP_FSTAT, CAP_WRITE);
- fcaps2.fc_fcntls = CAP_FCNTL_SETFL;
- error = kern_pipe(td, fds, 0, , );
- break;
case CLOUDABI_FILETYPE_SOCKET_DGRAM:
- error = kern_socketpair(td, AF_UNIX, SOCK_DGRAM, 0, fds);
+ type = SOCK_DGRAM;
break;
case CLOUDABI_FILETYPE_SOCKET_STREAM:
- error = kern_socketpair(td, AF_UNIX, SOCK_STREAM, 0, fds);
+ type = SOCK_STREAM;
break;
default:
return (EINVAL);
}
+ error = kern_socketpair(td, AF_UNIX, type, 0, fds);
if (error == 0) {
td->td_retval[0] = fds[0];
td->td_retval[1] = fds[1];
@@ -214,11 +200,11 @@ cloudabi_convert_filetype(const struct file *fp)
switch (fp->f_type) {
case DTYPE_FIFO:
- return (CLOUDABI_FILETYPE_FIFO);
+ return (CLOUDABI_FILETYPE_SOCKET_STREAM);
case DTYPE_KQUEUE:
return (CLOUDABI_FILETYPE_POLL);
case DTYPE_PIPE:
- return (CLOUDABI_FILETYPE_FIFO);
+ return (CLOUDABI_FILETYPE_SOCKET_STREAM);
case DTYPE_PROCDESC:
return (CLOUDABI_FILETYPE_PROCESS);
case DTYPE_SHM:
@@ -243,7 +229,7 @@ cloudabi_convert_filetype(const struct file *fp)
case VDIR:
return (CLOUDABI_FILETYPE_DIRECTORY);
case VFIFO:
- return (CLOUDABI_FILETYPE_FIFO);
+ return (CLOUDABI_FILETYPE_SOCKET_STREAM);
case VLNK:
return (CLOUDABI_FILETYPE_SYMBOLIC_LINK);
case VREG:
@@ -286,7 +272,6 @@ cloudabi_remove_conflicting_rights(cloudabi_filetype_t
CLOUDABI_RIGHT_FD_SYNC | CLOUDABI_RIGHT_FILE_ADVISE |
CLOUDABI_RIGHT_FILE_CREATE_DIRECTORY |
CLOUDABI_RIGHT_FILE_CREATE_FILE |
- CLOUDABI_RIGHT_FILE_CREATE_FIFO |
CLOUDABI_RIGHT_FILE_LINK_SOURCE |
CLOUDABI_RIGHT_FILE_LINK_TARGET |
CLOUDABI_RIGHT_FILE_OPEN |
@@ -312,7 +297,6 @@ cloudabi_remove_conflicting_rights(cloudabi_filetype_t
CLOUDABI_RIGHT_FILE_ALLOCATE |
CLOUDABI_RIGHT_FILE_CREATE_DIRECTORY |
CLOUDABI_RIGHT_FILE_CREATE_FILE |
- CLOUDABI_RIGHT_FILE_CREATE_FIFO |
CLOUDABI_RIGHT_FILE_LINK_SOURCE |