lib: xpc: add support for event messages

This commit is contained in:
2026-03-24 20:24:36 +00:00
parent e9ccefd980
commit dade9fa81f
2 changed files with 26 additions and 5 deletions

View File

@@ -17,10 +17,21 @@ typedef struct xpc_msg_header {
typedef struct xpc_msg {
xpc_endpoint_t msg_sender;
xpc_msg_header_t msg_header;
size_t msg_handles_count;
kern_msg_type_t msg_type;
kern_msg_handle_t msg_handles[KERN_MSG_MAX_HANDLES];
union {
/* msg_type = KERN_MSG_TYPE_DATA */
struct {
xpc_msg_header_t msg_header;
size_t msg_handles_count;
kern_msg_handle_t msg_handles[KERN_MSG_MAX_HANDLES];
};
/* msg_type = KERN_MSG_TYPE_EVENT */
struct {
kern_msg_event_type_t msg_event;
};
};
} xpc_msg_t;
extern void xpc_msg_header_init(

View File

@@ -54,14 +54,24 @@ static kern_status_t __msg_recv(
return status;
}
if (!xpc_msg_header_validate(&out->msg_header)) {
return KERN_INVALID_ARGUMENT;
switch (msg.msg_type) {
case KERN_MSG_TYPE_DATA:
if (!xpc_msg_header_validate(&out->msg_header)) {
return KERN_INVALID_ARGUMENT;
}
break;
case KERN_MSG_TYPE_EVENT:
out->msg_event = msg.msg_event;
break;
default:
break;
}
out->msg_sender.e_channel = channel;
out->msg_sender.e_task = msg.msg_sender;
out->msg_sender.e_port = msg.msg_endpoint;
out->msg_sender.e_msg = msg.msg_id;
out->msg_type = msg.msg_type;
return KERN_OK;
}