1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19: #include <hurd.h>
20:
21: static error_t
22: setbootstrap (mach_port_t newport)
23: {
24: return __task_set_special_port (__mach_task_self (),
25: TASK_BOOTSTRAP_PORT,
26: newport);
27: }
28:
29: extern error_t _hurd_setauth (auth_t);
30: extern error_t _hurd_setproc (process_t);
31: extern error_t _hurd_setcttyid (mach_port_t);
32:
33: error_t (*_hurd_ports_setters[INIT_PORT_MAX]) (mach_port_t newport) =
34: {
35: [INIT_PORT_BOOTSTRAP] = setbootstrap,
36: [INIT_PORT_AUTH] = _hurd_setauth,
37: [INIT_PORT_PROC] = _hurd_setproc,
38: [INIT_PORT_CTTYID] = _hurd_setcttyid,
39: };
40:
41:
42: error_t
43: _hurd_ports_set (unsigned int which, mach_port_t newport)
44: {
45: error_t err;
46: if (which >= _hurd_nports)
47: return EINVAL;
48: if (err = __mach_port_mod_refs (__mach_task_self (), newport,
49: MACH_PORT_RIGHT_SEND, 1))
50: return err;
51: if (which >= INIT_PORT_MAX || _hurd_ports_setters[which] == NULL)
52: {
53: _hurd_port_set (&_hurd_ports[which], newport);
54: return 0;
55: }
56: return (*_hurd_ports_setters[which]) (newport);
57: }