(jvmti_env: *mut jvmtiEnv,
class_file: &Classfile,
new_class_data_len: *mut jint,
new_class_data: *mut *mut c_uchar)
| 75 | } |
| 76 | |
| 77 | unsafe fn write_class(jvmti_env: *mut jvmtiEnv, |
| 78 | class_file: &Classfile, |
| 79 | new_class_data_len: *mut jint, |
| 80 | new_class_data: *mut *mut c_uchar) -> Result<(), String> { |
| 81 | let mut new_class_curs = Cursor::new(Vec::new()); |
| 82 | str_err(ClassWriter::new(&mut new_class_curs).write_class(&class_file))?; |
| 83 | let new_class_vec: &Vec<u8> = new_class_curs.get_ref(); |
| 84 | ptr::write(new_class_data_len, new_class_vec.len() as jint); |
| 85 | let alloc_res = (**jvmti_env).Allocate.unwrap()(jvmti_env, new_class_vec.len() as jlong, new_class_data); |
| 86 | util::unit_or_jvmti_err(alloc_res)?; |
| 87 | ptr::copy_nonoverlapping(new_class_vec.as_ptr(), *new_class_data, new_class_vec.len()); |
| 88 | return Result::Ok(()); |
| 89 | } |
| 90 | |
| 91 | unsafe fn add_param_info_field(class_file: &mut Classfile) { |
| 92 | let field_name_idx = ConstantPoolIndex { idx: utf8_const(class_file, "paramInfo") }; |
no test coverage detected