1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19: #include <hurd.h>
20:
21:
22:
23:
24: mach_port_t _hurd_host_priv, _hurd_device_master;
25:
26:
27: kern_return_t
28: __get_privileged_ports (mach_port_t *host_priv_ptr,
29: device_t *device_master_ptr)
30: {
31: if ((host_priv_ptr && _hurd_host_priv == MACH_PORT_NULL)
32: || (device_master_ptr && _hurd_device_master == MACH_PORT_NULL))
33: {
34: error_t err;
35:
36: if (_hurd_ports)
37:
38:
39: err = __USEPORT (PROC, __proc_getprivports (port,
40: &_hurd_host_priv,
41: &_hurd_device_master));
42: else
43: return MACH_SEND_INVALID_DEST;
44:
45: if (err)
46: return err;
47: }
48:
49: if (host_priv_ptr)
50: {
51: error_t err = _hurd_host_priv == MACH_PORT_NULL ? 0
52: : __mach_port_mod_refs (mach_task_self (),
53: _hurd_host_priv, MACH_PORT_RIGHT_SEND, +1);
54: if (err)
55: return err;
56: *host_priv_ptr = _hurd_host_priv;
57: }
58:
59: if (device_master_ptr)
60: {
61: error_t err = _hurd_device_master == MACH_PORT_NULL ? 0
62: : __mach_port_mod_refs (mach_task_self (),
63: _hurd_device_master, MACH_PORT_RIGHT_SEND, +1);
64: if (err)
65: return err;
66: *device_master_ptr = _hurd_device_master;
67: }
68:
69: return KERN_SUCCESS;
70: }
71: weak_alias (__get_privileged_ports, get_privileged_ports)