toolchain: xpcg: fix buffer length output not being set

This commit is contained in:
2026-03-24 12:45:13 +00:00
parent 20723d4dff
commit e9ccefd980

View File

@@ -542,6 +542,11 @@ static int emit_interface_msg_function_send_impl(
emit(ctx, ": KERN_HANDLE_INVALID;\n"); emit(ctx, ": KERN_HANDLE_INVALID;\n");
break; break;
case TYPE_BUFFER: case TYPE_BUFFER:
emit(ctx,
"*out_%s_len = msg_data.msg_response.%s_len;\n",
param->p_name,
param->p_name);
break;
case TYPE_STRING: case TYPE_STRING:
break; break;
default: default:
@@ -627,13 +632,17 @@ static int emit_interface_msg_function_send(
break; break;
case TYPE_STRING: case TYPE_STRING:
emit(ctx, emit(ctx,
"char *out_%s,\nsize_t out_%s_max", "char *out_%s,\nsize_t out_%s_max,\nsize_t "
"*out_%s_len",
param->p_name,
param->p_name, param->p_name,
param->p_name); param->p_name);
break; break;
case TYPE_BUFFER: case TYPE_BUFFER:
emit(ctx, emit(ctx,
"void *out_%s,\nsize_t out_%s_max", "void *out_%s,\nsize_t out_%s_max,\nsize_t "
"*out_%s_len",
param->p_name,
param->p_name, param->p_name,
param->p_name); param->p_name);
break; break;
@@ -679,7 +688,7 @@ static int emit_interface_dispatcher_impl_msg(
msg->msg_name); msg->msg_name);
emit(ctx, emit(ctx,
"status = xpc_msg_read(msg, 0, &" MSG_STRUCT_NAME "status = xpc_msg_read(msg, 0, &" MSG_STRUCT_NAME
", sizeof " MSG_STRUCT_NAME ");\n"); ", sizeof " MSG_STRUCT_NAME ", NULL);\n");
fx_queue_entry *entry = fx_queue_first(&msg->msg_params); fx_queue_entry *entry = fx_queue_first(&msg->msg_params);
while (entry) { while (entry) {
@@ -836,6 +845,13 @@ static int emit_interface_dispatcher_impl_msg(
handle_index); handle_index);
handle_index++; handle_index++;
break; break;
case TYPE_BUFFER:
emit(ctx,
MSG_STRUCT_NAME
".msg_response.%s_len = xpc_buffer_length(&%s);\n",
param->p_name,
param->p_name);
break;
default: default:
break; break;
} }