diff options
author | Roland McGrath <roland@gnu.org> | 2000-03-17 10:24:30 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2000-03-17 10:24:30 +0000 |
commit | 62b6e3e94d2ab8544840d38ebd2ce591db6b904b (patch) | |
tree | 2d8220a06cdc7e0b24606975df95706a032f6ec4 | |
parent | c78bdb48c09a261aa2558e3d829df3fa5813270b (diff) |
2000-03-17 Roland McGrath <roland@baalperazim.frob.com>
* get-send-right.c: New file.
* ports.h: Declare ports_get_send_right.
* Makefile (SRCS): Add get-send-right.c.
-rw-r--r-- | libports/Makefile | 5 | ||||
-rw-r--r-- | libports/get-send-right.c | 38 | ||||
-rw-r--r-- | libports/ports.h | 11 |
3 files changed, 49 insertions, 5 deletions
diff --git a/libports/Makefile b/libports/Makefile index 2cc38d63..50b5ed9e 100644 --- a/libports/Makefile +++ b/libports/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 1995,96,97,99 Free Software Foundation, Inc. +# Copyright (C) 1995,96,97,99,2000 Free Software Foundation, Inc. # Written by Michael I. Bushnell. # # This file is part of the GNU Hurd. @@ -29,7 +29,8 @@ SRCS = create-bucket.c create-class.c \ inhibit-port-rpcs.c inhibit-class-rpcs.c inhibit-bucket-rpcs.c \ inhibit-all-rpcs.c resume-port-rpcs.c resume-class-rpcs.c \ resume-bucket-rpcs.c resume-all-rpcs.c interrupt-rpcs.c \ - init.c complete-deallocate.c get-right.c count-class.c count-bucket.c \ + init.c complete-deallocate.c get-right.c get-send-right.c \ + count-class.c count-bucket.c \ enable-class.c enable-bucket.c bucket-iterate.c class-iterate.c stubs.c \ notify-dead-name.c notify-no-senders.c notify-port-destroyed.c \ notify-msg-accepted.c notify-port-deleted.c notify-send-once.c \ diff --git a/libports/get-send-right.c b/libports/get-send-right.c new file mode 100644 index 00000000..3e00276c --- /dev/null +++ b/libports/get-send-right.c @@ -0,0 +1,38 @@ +/* ports_get_send_right -- get a send right to a ports object + Copyright (C) 2000 Free Software Foundation, Inc. + + This file is part of the GNU Hurd. + + The GNU Hurd is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2, or (at + your option) any later version. + + The GNU Hurd is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#include "ports.h" +#include <assert.h> + +mach_port_t +ports_get_send_right (void *port) +{ + error_t err; + mach_port_t right; + + right = ports_get_right (port); + if (right == MACH_PORT_NULL) + return MACH_PORT_NULL; + + err = mach_port_insert_right (mach_task_self (), + right, right, MACH_MSG_TYPE_MAKE_SEND); + assert_perror (err); + + return right; +} diff --git a/libports/ports.h b/libports/ports.h index ab347c84..6a406ed0 100644 --- a/libports/ports.h +++ b/libports/ports.h @@ -1,5 +1,5 @@ /* Ports library for server construction - Copyright (C) 1993,94,95,96,97,99 Free Software Foundation, Inc. + Copyright (C) 1993,94,95,96,97,99,2000 Free Software Foundation, Inc. Written by Michael I. Bushnell. This file is part of the GNU Hurd. @@ -209,10 +209,15 @@ mach_port_t ports_claim_right (void *port); were called. */ error_t ports_transfer_right (void *topt, void *frompt); -/* Return the name of the receive right associated with PORT. The user - is responsible for creating an ordinary send right from this name. */ +/* Return the name of the receive right associated with PORT. This assumes + that send rights will shortly be created, and arranges for notifications + accordingly. The user is responsible for creating an ordinary send + right from this name. */ mach_port_t ports_get_right (void *port); +/* This convenience function uses ports_get_right, and + deals with the creation of a send right as well. */ +mach_port_t ports_get_send_right (void *port); /* Reference counting */ |