diff options
author | Mark Kettenis <kettenis@gnu.org> | 2000-08-02 20:19:45 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@gnu.org> | 2000-08-02 20:19:45 +0000 |
commit | a6888a2b3a918920fe27133308c820e78dcecf16 (patch) | |
tree | f6f411ce5fcbcc26087c78daa4b93ddc613defd7 /pflocal/pf.c | |
parent | 18dc5dc677ebf1d415e1adeff24041e9f496a2ed (diff) |
Add `magic' protocols to specify the file type of a sockets. This
allows implementation of POSIX pipes by using a S_IFSOCK protocol.
* sock.h: Include <sys/types.h>.
(struct sock): Add new member `mode'.
(sock_create): Add new parameter `mode'.
* sock.c (sock_create): Initialize `mode' member of struct sock,
with new parameter.
* pf.c (S_socket_create): Pass file type/mode to sock_create based
on PROTOCOL.
* io.c (S_io_stat): Use new member of `struct sock' to set
ST->st_mode.
Diffstat (limited to 'pflocal/pf.c')
-rw-r--r-- | pflocal/pf.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/pflocal/pf.c b/pflocal/pf.c index 65d5c5a9..1244c600 100644 --- a/pflocal/pf.c +++ b/pflocal/pf.c @@ -1,6 +1,6 @@ /* Protocol family operations - Copyright (C) 1995, 1999 Free Software Foundation, Inc. + Copyright (C) 1995, 1999, 2000 Free Software Foundation, Inc. Written by Miles Bader <miles@gnu.ai.mit.edu> @@ -36,8 +36,17 @@ S_socket_create (mach_port_t pf, error_t err; struct sock *sock; struct pipe_class *pipe_class; - - if (protocol != 0) + mode_t mode; + + /* We have a set of `magic' protocols that allow the user to choose + the file type of the socket. The primary application is to make + sockets that pretend to be a FIFO, for the implementations of + pipes. */ + if (protocol == 0) + mode = S_IFSOCK; + else if ((protocol & ~S_IFMT) == 0) + mode = protocol & S_IFMT; + else return EPROTONOSUPPORT; switch (sock_type) @@ -52,7 +61,7 @@ S_socket_create (mach_port_t pf, return ESOCKTNOSUPPORT; } - err = sock_create (pipe_class, &sock); + err = sock_create (pipe_class, mode, &sock); if (!err) { err = sock_create_port (sock, port); |