Skip to content

Instantly share code, notes, and snippets.

@dkomanov
Created October 27, 2022 10:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dkomanov/d7d2cf20d003e7ee1df9870f4310ff4b to your computer and use it in GitHub Desktop.
Save dkomanov/d7d2cf20d003e7ee1df9870f4310ff4b to your computer and use it in GitHub Desktop.
#[no_mangle]
pub extern "system" fn decodeConfigSliceUrlSafe1(
env: JNIEnv,
_class: JClass,
payload: jbyteArray,
size: usize,
) -> jbyteArray {
let mut buffer = Vec::<u8>::with_capacity(size * 3 / 4);
let arr = env.get_byte_array_elements(
payload,
ReleaseMode::NoCopyBack,
).unwrap();
let (input_slice, mut output_slice) = unsafe {
(
from_raw_parts(arr.as_ptr() as *const u8, size),
from_raw_parts_mut(buffer.as_mut_ptr(), buffer.capacity()),
)
};
let size = base64::decode_config_slice(
input_slice,
base64::URL_SAFE_NO_PAD,
&mut output_slice,
).unwrap();
// simplified assert, correct probably only for benchmark data.
assert_eq!(size, buffer.capacity());
unsafe {
buffer.set_len(size);
}
return env.byte_array_from_slice(&buffer).unwrap();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment