summaryrefslogtreecommitdiff
path: root/pflocal/pf.c
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@gnu.org>2000-08-02 20:19:45 +0000
committerMark Kettenis <kettenis@gnu.org>2000-08-02 20:19:45 +0000
commita6888a2b3a918920fe27133308c820e78dcecf16 (patch)
treef6f411ce5fcbcc26087c78daa4b93ddc613defd7 /pflocal/pf.c
parent18dc5dc677ebf1d415e1adeff24041e9f496a2ed (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.c17
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);