1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
/* Module startup_notify */
#ifndef _GNU_SOURCE
#define _GNU_SOURCE 1
#endif
#define EXPORT_BOOLEAN
#include <mach/boolean.h>
#include <mach/kern_return.h>
#include <mach/message.h>
#include <mach/mig_errors.h>
#include <mach/mig_support.h>
#ifndef mig_internal
#define mig_internal static
#endif
#ifndef mig_external
#define mig_external
#endif
#ifndef TypeCheck
#define TypeCheck 1
#endif
#ifndef UseExternRCSId
#define UseExternRCSId 1
#endif
#define BAD_TYPECHECK(type, check) ({\
union { mach_msg_type_t t; unsigned32_t w; } _t, _c;\
_t.t = *(type); _c.t = *(check); _t.w != _c.w; })
#define msgh_request_port msgh_local_port
#define MACH_MSGH_BITS_REQUEST(bits) MACH_MSGH_BITS_LOCAL(bits)
#define msgh_reply_port msgh_remote_port
#define MACH_MSGH_BITS_REPLY(bits) MACH_MSGH_BITS_REMOTE(bits)
#include <mach/std_types.h>
#include <mach/mach_types.h>
#include <device/device_types.h>
#include <device/net_status.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/statfs.h>
#include <sys/resource.h>
#include <sys/utsname.h>
#include <hurd/hurd_types.h>
/* Routine startup_dosync */
mig_internal void _Xstartup_dosync
(mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
{
typedef struct {
mach_msg_header_t Head;
} Request;
typedef struct {
mach_msg_header_t Head;
mach_msg_type_t RetCodeType;
kern_return_t RetCode;
} Reply;
register Request *In0P = (Request *) InHeadP;
register Reply *OutP = (Reply *) OutHeadP;
mig_external kern_return_t S_startup_dosync
(mach_port_t notify_port);
#if TypeCheck
if ((In0P->Head.msgh_size != 24) ||
(In0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX))
{ OutP->RetCode = MIG_BAD_ARGUMENTS; return; }
#endif /* TypeCheck */
OutP->RetCode = S_startup_dosync(In0P->Head.msgh_request_port);
}
static mig_routine_t startup_notify_server_routines[] = {
_Xstartup_dosync,
};
mig_external boolean_t startup_notify_server
(mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
{
register mach_msg_header_t *InP = InHeadP;
register mig_reply_header_t *OutP = (mig_reply_header_t *) OutHeadP;
auto const mach_msg_type_t RetCodeType = {
/* msgt_name = */ MACH_MSG_TYPE_INTEGER_32,
/* msgt_size = */ 32,
/* msgt_number = */ 1,
/* msgt_inline = */ TRUE,
/* msgt_longform = */ FALSE,
/* msgt_deallocate = */ FALSE,
/* msgt_unused = */ 0
};
register mig_routine_t routine;
OutP->Head.msgh_bits = MACH_MSGH_BITS(MACH_MSGH_BITS_REPLY(InP->msgh_bits), 0);
OutP->Head.msgh_size = sizeof *OutP;
OutP->Head.msgh_remote_port = InP->msgh_reply_port;
OutP->Head.msgh_local_port = MACH_PORT_NULL;
OutP->Head.msgh_seqno = 0;
OutP->Head.msgh_id = InP->msgh_id + 100;
OutP->RetCodeType = RetCodeType;
if ((InP->msgh_id > 29500) || (InP->msgh_id < 29500) ||
((routine = startup_notify_server_routines[InP->msgh_id - 29500]) == 0)) {
OutP->RetCode = MIG_BAD_ID;
return FALSE;
}
(*routine) (InP, &OutP->Head);
return TRUE;
}
mig_external mig_routine_t startup_notify_server_routine
(const mach_msg_header_t *InHeadP)
{
register int msgh_id;
msgh_id = InHeadP->msgh_id - 29500;
if ((msgh_id > 0) || (msgh_id < 0))
return 0;
return startup_notify_server_routines[msgh_id];
}
|