From fbb030ec8ed4c5653a5e7936415a03ab15196271 Mon Sep 17 00:00:00 2001 From: Vladimir Dostoyevskiy <99822064+VDostoyevskiy@users.noreply.github.com> Date: Sun, 31 Dec 2023 13:51:14 +0800 Subject: [PATCH] Drop custom PtrCursor (#569) * Drop custom PtrCursor * Drop unused crate * Fixup --------- Co-authored-by: GG Bond --- app/src/main/rust/Cargo.toml | 1 - app/src/main/rust/src/lib.rs | 34 +++++++--------------------------- 2 files changed, 7 insertions(+), 28 deletions(-) diff --git a/app/src/main/rust/Cargo.toml b/app/src/main/rust/Cargo.toml index 9c3e05898..84f92087f 100644 --- a/app/src/main/rust/Cargo.toml +++ b/app/src/main/rust/Cargo.toml @@ -14,7 +14,6 @@ quick-xml = { default-features = false, version = "0.31" } tl = "0.7" log = "0.4" android_logger = { default-features = false, version = "0.13" } -apply = "0.3" once_cell = { default-features = false, version = "1.19" } serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } diff --git a/app/src/main/rust/src/lib.rs b/app/src/main/rust/src/lib.rs index 3214e2dd9..b1bccc29c 100644 --- a/app/src/main/rust/src/lib.rs +++ b/app/src/main/rust/src/lib.rs @@ -1,7 +1,6 @@ mod parser; extern crate android_logger; -extern crate apply; extern crate jni; extern crate jni_fn; extern crate log; @@ -18,9 +17,9 @@ use jni::JNIEnv; use log::LevelFilter; use serde::Serialize; use std::ffi::c_void; -use std::io::Write; +use std::io::Cursor; use std::panic::{catch_unwind, UnwindSafe}; -use std::ptr::slice_from_raw_parts; +use std::ptr::{slice_from_raw_parts, slice_from_raw_parts_mut}; use std::str::from_utf8_unchecked; use tl::{Bytes, Node, NodeHandle, Parser, VDom}; @@ -35,28 +34,6 @@ macro_rules! regex { const EHGT_PREFIX: &str = "https://ehgt.org/"; const EX_PREFIX: &str = "https://s.exhentai.org/"; -struct PtrCursor { - ptr: *mut u8, - pos: i32, -} - -impl Write for PtrCursor { - fn write(&mut self, buf: &[u8]) -> std::io::Result { - let len = buf.len(); - unsafe { - self.ptr.copy_from(buf.as_ptr(), len); - self.ptr = self.ptr.add(len); - self.pos += len as i32; - } - Ok(len) - } - - fn flush(&mut self) -> std::io::Result<()> { - // Nothing - Ok(()) - } -} - fn check_html(str: &str) { if !str.contains('<') { panic!("{}", str) @@ -110,9 +87,12 @@ where // Nothing to marshal None => 0, Some(value) => { - let mut cursor = PtrCursor { ptr, pos: 0 }; + let mut cursor = unsafe { + let slice = slice_from_raw_parts_mut(ptr, 0x80000); + Cursor::new(&mut *slice) + }; serde_json::to_writer(&mut cursor, &value).unwrap(); - cursor.pos + cursor.position() as i32 } } };