summaryrefslogtreecommitdiff
path: root/boot-proxy-exc/mach_port_impl.c~
diff options
context:
space:
mode:
Diffstat (limited to 'boot-proxy-exc/mach_port_impl.c~')
-rw-r--r--boot-proxy-exc/mach_port_impl.c~377
1 files changed, 0 insertions, 377 deletions
diff --git a/boot-proxy-exc/mach_port_impl.c~ b/boot-proxy-exc/mach_port_impl.c~
deleted file mode 100644
index b49ae789..00000000
--- a/boot-proxy-exc/mach_port_impl.c~
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
- Copyright (C) 2009 Free Software Foundation, Inc.
- Written by Zheng Da.
-
- 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 the GNU Hurd; see the file COPYING. If not, write to
- the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* This file implements the server-side RPC functions of mach_host. */
-
-#include <mach.h>
-#include <hurd.h>
-#include <string.h>
-#include <assert.h>
-
-#include "util.h"
-#include "mach_proxy.h"
-
-kern_return_t
-S_mach_port_names (mach_port_t task, mach_port_array_t *names,
- mach_msg_type_number_t *namesCnt,
- mach_port_type_array_t *types,
- mach_msg_type_number_t *typesCnt)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_names (task_pi->task_port,
- names, namesCnt, types, typesCnt);
- debug ("%s", strerror (err));
- /* The deallocation bit is set,
- * so 'names' and 'types' will be deallocated after the reply is sent. */
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_type */
-kern_return_t
-S_mach_port_type (mach_port_t task, mach_port_t name, mach_port_type_t *ptype)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_type (task_pi->task_port, name, ptype);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_rename */
-kern_return_t
-S_mach_port_rename (mach_port_t task,
- mach_port_t old_name, mach_port_t new_name)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- /* old_name and new_name are just names,
- * so I don't need to deallocate them.
- * It should be the same for other RPCs that only deal with port names */
- err = mach_port_rename (task_pi->task_port, old_name, new_name);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_allocate_name */
-kern_return_t
-S_mach_port_allocate_name (mach_port_t task,
- mach_port_right_t right, mach_port_t name)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_allocate_name (task_pi->task_port, right, name);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_allocate */
-kern_return_t
-S_mach_port_allocate (mach_port_t task,
- mach_port_right_t right, mach_port_t *name)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_allocate (task_pi->task_port, right, name);
- debug ("get a request from task %d: %s", task_pi->task_port, strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_destroy */
-kern_return_t
-S_mach_port_destroy (mach_port_t task, mach_port_t name)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_destroy (task_pi->task_port, name);
- debug ("get a request from port %d: %s",
- task_pi->task_port, strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_deallocate */
-kern_return_t
-S_mach_port_deallocate (mach_port_t task, mach_port_t name)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_deallocate (task_pi->task_port, name);
- debug ("get a request from task %d, name: %d, %s",
- task_pi->task_port, name, strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_get_refs */
-kern_return_t
-S_mach_port_get_refs (mach_port_t task, mach_port_t name,
- mach_port_right_t right, mach_port_urefs_t *refs)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_get_refs (task_pi->task_port, name, right, refs);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_mod_refs */
-kern_return_t
-S_mach_port_mod_refs (mach_port_t task, mach_port_t name,
- mach_port_right_t right, mach_port_delta_t delta)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_mod_refs (task_pi->task_port, name, right, delta);
- debug ("get a request from task %d: port: %d, right: %d, delta: %d, %s",
- task_pi->task_port, name, right, delta, strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine old_mach_port_get_receive_status */
-kern_return_t
-S_old_mach_port_get_receive_status (mach_port_t task, mach_port_t name,
- old_mach_port_status_t *status)
-{
- debug ("%s", strerror (EOPNOTSUPP));
- assert (0);
- /* Hurd currently doesn't use it. */
- return EOPNOTSUPP;
-}
-
-/* Routine mach_port_set_qlimit */
-kern_return_t
-S_mach_port_set_qlimit (mach_port_t task, mach_port_t name,
- mach_port_msgcount_t qlimit)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_set_qlimit (task_pi->task_port, name, qlimit);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_set_mscount */
-kern_return_t
-S_mach_port_set_mscount (mach_port_t task, mach_port_t name,
- mach_port_mscount_t mscount)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_set_mscount (task_pi->task_port, name, mscount);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_get_set_status */
-kern_return_t
-S_mach_port_get_set_status (mach_port_t task, mach_port_t name,
- mach_port_array_t *members,
- mach_msg_type_number_t *membersCnt)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_get_set_status (task_pi->task_port,
- name, members, membersCnt);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- /* The deallocation bit is set,
- * so 'members' will be deallocated after the reply is sent. */
- return err;
-}
-
-/* Routine mach_port_move_member */
-kern_return_t
-S_mach_port_move_member (mach_port_t task, mach_port_t member,
- mach_port_t after)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_move_member (task_pi->task_port, member, after);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_request_notification */
-kern_return_t
-S_mach_port_request_notification (mach_port_t task, mach_port_t name,
- mach_msg_id_t id, mach_port_mscount_t sync,
- mach_port_t notify, mach_port_t *previous,
- mach_msg_type_name_t *previousPoly)
-{
- struct task_info *task_pi;
- mach_msg_type_name_t notify_type = MACH_MSG_TYPE_MOVE_SEND_ONCE;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- if (notify == 0)
- notify_type = 0;
- /* notify is send-once right from the client. */
- err = mach_port_request_notification (task_pi->task_port, name, id, sync,
- notify, notify_type, previous);
- debug ("get a request from task %d, port: %d, id: %d, notify: %d, notify_type: %d, old port: %d, %s",
- task_pi->task_port, name, id, notify, notify_type, *previous, strerror (err));
- ports_port_deref (task_pi);
- if (err)
- return err;
- *previousPoly = MACH_MSG_TYPE_MOVE_SEND_ONCE;
-
- return 0;
-}
-
-/* Routine mach_port_insert_right */
-kern_return_t
-S_mach_port_insert_right (mach_port_t task, mach_port_t name,
- mach_port_t poly, mach_msg_type_name_t polyPoly)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- /* polyPoly can only be three possible values: MACH_MSG_TYPE_PORT_SEND,
- * MACH_MSG_TYPE_PORT_SEND_ONCE and MACH_MSG_TYPE_PORT_RECEIVE,
- * so port will be deallocated when mach_port_insert_right is called. */
- err = mach_port_insert_right (task_pi->task_port, name, poly, polyPoly);
- debug ("get a request from task %d: %s", task_pi->task_port, strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_extract_right */
-kern_return_t
-S_mach_port_extract_right (mach_port_t task, mach_port_t name,
- mach_msg_type_name_t msgt_name, mach_port_t *poly,
- mach_msg_type_name_t *polyPoly)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_extract_right (task_pi->task_port, name, msgt_name,
- poly, polyPoly);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- /* *polyPoly can only be MACH_MSG_TYPE_PORT_SEND, MACH_MSG_TYPE_PORT_RECEIVE,
- * or MACH_MSG_TYPE_PORT_SEND_ONCE, so the port extracted from 'task'
- * will be moved to the client. */
- return err;
-}
-
-/* Routine mach_port_get_receive_status */
-kern_return_t
-S_mach_port_get_receive_status (mach_port_t task, mach_port_t name,
- mach_port_status_t *status)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_get_receive_status (task_pi->task_port, name, status);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_set_seqno */
-kern_return_t
-S_mach_port_set_seqno (mach_port_t task, mach_port_t name,
- mach_port_seqno_t seqno)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_set_seqno (task_pi->task_port, name, seqno);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- return err;
-}