stdout und stderr encoding

This commit is contained in:
vegowotenks 2024-10-22 13:01:20 +02:00
parent 022bfe9ee6
commit b4c33a0d9b
4 changed files with 116 additions and 6 deletions

View file

@ -361,6 +361,34 @@ impl JdkInternalUtilSystemPropsRaw {
};
let array_reference = jvm.heap_area.make_empty_array(&jvm.class_store, AbstractTypeDescription { array_level: 0, kind: AbstractTypeKind::Classname("java/lang/String".into()) }, array_length);
let utf8_string_ref = jvm.heap_area.make_handmade_string(&String::from("UTF-8"), &jvm.class_store);
{
let stdout_encoding_ndx_result = jvm.heap_area.static_area.get(
&String::from("jdk/internal/util/SystemProps$Raw"),
&String::from("_stdout_encoding_NDX"),
AbstractTypeDescription { array_level: 0, kind: AbstractTypeKind::Int() }
);
let stdout_encoding_ndx = match stdout_encoding_ndx_result {
Ok(FieldValue::Int(i)) => i as usize,
_ => unreachable!(),
};
jvm.heap_area.object_area.set_array_element(array_reference, stdout_encoding_ndx, FieldValue::Reference(utf8_string_ref));
}
{
let stderr_encoding_ndx_result = jvm.heap_area.static_area.get(
&String::from("jdk/internal/util/SystemProps$Raw"),
&String::from("_stderr_encoding_NDX"),
AbstractTypeDescription { array_level: 0, kind: AbstractTypeKind::Int() }
);
let stderr_encoding_ndx = match stderr_encoding_ndx_result {
Ok(FieldValue::Int(i)) => i as usize,
_ => unreachable!(),
};
jvm.heap_area.object_area.set_array_element(array_reference, stderr_encoding_ndx, FieldValue::Reference(utf8_string_ref));
}
Ok(JVMCallbackOperation::ReturnFrame(StackValue::Reference(array_reference)))
}