#define RECEIVE_POOL_SIZE_MIN_KBYTES 16
#define KDBUS_MEMFD_THRESHOLD (512 * 1024LU)
+#define KDBUS_MSG_MAX_PAYLOAD_VEC_SIZE 0x00200000 /* maximum size of message header and items */
#define KDBUS_ALIGN8(l) (((l) + 7) & ~7)
#define KDBUS_ALIGN8_PTR(p) ((void*) (uintptr_t)(p))
gconstpointer data,
gsize size)
{
- struct kdbus_vec vec = {
- .size = size,
- .address = (gsize) data
- };
-
- return g_kdbus_msg_append_item (msg, KDBUS_ITEM_PAYLOAD_VEC, &vec, sizeof vec);
+ gboolean ok = TRUE;
+ do {
+ struct kdbus_vec vec = {
+ .size = size <= KDBUS_MSG_MAX_PAYLOAD_VEC_SIZE ? size : KDBUS_MSG_MAX_PAYLOAD_VEC_SIZE,
+ .address = (gsize) data
+ };
+ ok = g_kdbus_msg_append_item (msg, KDBUS_ITEM_PAYLOAD_VEC, &vec, sizeof vec);
+ data = (char*)data + vec.size;
+ size -= vec.size;
+ } while (size > 0 && ok);
+ return ok;
}
static gboolean