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/sock.c | |
parent | 18dc5dc677ebf1d415e1adeff24041e9f496a2ed (diff) | |
download | hurd-a6888a2b3a918920fe27133308c820e78dcecf16.tar.gz hurd-a6888a2b3a918920fe27133308c820e78dcecf16.tar.bz2 hurd-a6888a2b3a918920fe27133308c820e78dcecf16.zip |
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/sock.c')
-rw-r--r-- | pflocal/sock.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/pflocal/sock.c b/pflocal/sock.c index 350c7de8..dffd6bf7 100644 --- a/pflocal/sock.c +++ b/pflocal/sock.c @@ -1,6 +1,6 @@ /* Sock functions - Copyright (C) 1995, 1996 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 2000 Free Software Foundation, Inc. Written by Miles Bader <miles@gnu.ai.mit.edu> @@ -94,7 +94,7 @@ sock_acquire_write_pipe (struct sock *sock, struct pipe **pipe) /* Return a new socket with the given pipe class in SOCK. */ error_t -sock_create (struct pipe_class *pipe_class, struct sock **sock) +sock_create (struct pipe_class *pipe_class, mode_t mode, struct sock **sock) { error_t err; struct sock *new = malloc (sizeof (struct sock)); @@ -116,6 +116,7 @@ sock_create (struct pipe_class *pipe_class, struct sock **sock) new->refs = 0; new->flags = 0; new->write_pipe = NULL; + new->mode = mode; new->id = MACH_PORT_NULL; new->listen_queue = NULL; new->connect_queue = NULL; @@ -155,7 +156,7 @@ _sock_norefs (struct sock *sock) error_t sock_clone (struct sock *template, struct sock **sock) { - error_t err = sock_create (template->pipe_class, sock); + error_t err = sock_create (template->pipe_class, template->mode, sock); if (err) return err; |