lib: xpc: implement writing to local buffers

This commit is contained in:
2026-03-15 09:43:00 +00:00
parent c9ccebacfc
commit ea2b0d3986
2 changed files with 16 additions and 3 deletions

View File

@@ -1,4 +1,5 @@
#include <mango/status.h>
#include <string.h>
#include <xpc/buffer.h>
#include <xpc/msg.h>
@@ -36,8 +37,7 @@ kern_status_t xpc_buffer_write(
size_t len,
size_t *nr_written)
{
if ((buf->buf_flags & (XPC_BUFFER_F_OUT | XPC_BUFFER_F_REMOTE))
!= (XPC_BUFFER_F_OUT | XPC_BUFFER_F_REMOTE)) {
if (!(buf->buf_flags & XPC_BUFFER_F_OUT)) {
return KERN_BAD_STATE;
}
@@ -46,6 +46,12 @@ kern_status_t xpc_buffer_write(
to_write = buf->buf_max;
}
if (!(buf->buf_flags & XPC_BUFFER_F_REMOTE)) {
memcpy(buf->buf_ptr, in, to_write);
*nr_written = to_write;
return KERN_OK;
}
kern_status_t status
= xpc_msg_write(buf->buf_origin, buf->buf_offset, in, to_write);
if (status != KERN_OK) {

View File

@@ -18,6 +18,13 @@
.buf_offset = (offset), \
.buf_len = (size), \
}
#define XPC_LOCAL_BUFFER_OUT(ptr, size) \
{ \
.buf_flags = XPC_BUFFER_F_OUT, \
.buf_ptr = (ptr), \
.buf_max = (size), \
.buf_len = (size), \
}
struct xpc_msg;
@@ -49,7 +56,7 @@ typedef struct xpc_buffer {
/* only valid if F_OUT is set.
* if F_FREE_ON_DISCARD is set, must be either NULL or
* allocated via xpc_context_alloc */
const char *buf_ptr;
void *buf_ptr;
};
/* fields that are only valid if F_IN is set */