Add methods for Parcel in rust-rpc-port 64/317864/1
authorpjh9216 <jh9216.park@samsung.com>
Thu, 9 Jan 2025 05:55:31 +0000 (14:55 +0900)
committerpjh9216 <jh9216.park@samsung.com>
Thu, 9 Jan 2025 05:55:31 +0000 (14:55 +0900)
 - Add fn write_fd(&self, fd: RawFd)
 - Add fn read_fd(&self) -> RawFd

Change-Id: I7d4f4ecca78cea2ff6ef39e8b8ecf5f708abd441
Signed-off-by: pjh9216 <jh9216.park@samsung.com>
src/rust-rpc-port/src/parcel/mod.rs

index a904907afbb60206c19102235a49f62c4db45e3d..3ecc4a1375087a204bcea3458dd40edef2ef3ff7 100644 (file)
@@ -3,6 +3,7 @@ extern crate tizen_bundle;
 use parcel::tizen_bundle::Bundle;
 use std::ffi::{c_void, c_uint, CStr, CString};
 use std::os::raw::c_char;
+use std::os::fd::RawFd;
 
 #[cfg(test)]
 pub mod tests;
@@ -31,6 +32,7 @@ extern "C" {
     fn rpc_port_parcel_write_bool(h: *mut c_void, b: bool) -> i32;
     fn rpc_port_parcel_write_bundle(h: *mut c_void, bundle: *mut c_void) ->i32;
     fn rpc_port_parcel_write_array_count(h: *mut c_void, count: i32) -> i32;
+    fn rpc_port_parcel_write_fd(h: *mut c_void, fd: i32) -> i32;
     fn rpc_port_parcel_read_byte(h: *mut c_void, b: *mut i8) -> i32;
     fn rpc_port_parcel_read_int16(h: *mut c_void, i: *mut i16) -> i32;
     fn rpc_port_parcel_read_int32(h: *mut c_void, i: *mut i32) -> i32;
@@ -43,6 +45,7 @@ extern "C" {
     fn rpc_port_parcel_read_array_count(h: *mut c_void, count: *mut i32) -> i32;
     fn rpc_port_parcel_burst_read(h: *mut c_void, buf: *mut u8, size: u32) -> i32;
     fn rpc_port_parcel_burst_write(h: *mut c_void, buf: *const u8, size: u32) -> i32;
+    fn rpc_port_parcel_read_fd(h: *mut c_void, fd: *mut i32) -> i32;
     fn rpc_port_parcel_reserve(h: *mut c_void, size: u32) -> i32;
     fn rpc_port_parcel_create_from_parcel(h: *mut *mut c_void, origin_parcel: *mut c_void,
         start_pos: u32, size: u32) -> i32;
@@ -209,6 +212,11 @@ impl Parcel {
         );
     }
 
+    pub fn write_fd(&self, fd: RawFd) {
+        let ret = unsafe { rpc_port_parcel_write_fd(self.handle, fd) };
+        assert_eq!(ret, 0, "failed at rpc_port_parcel_write_fd : {}", ret);
+    }
+
     pub fn read_i8(&self) -> i8 {
         let mut x: i8 = 0;
         let b = &mut x as *mut i8;
@@ -291,6 +299,18 @@ impl Parcel {
         count as usize
     }
 
+    pub fn read_fd(&self) -> RawFd {
+        let mut fd: i32 = 0;
+        let fd_ptr = &mut fd as *mut i32;
+        let ret = unsafe { rpc_port_parcel_read_fd(self.handle, fd_ptr) };
+        assert_eq!(
+            ret, 0,
+            "failed at rpc_port_parcel_read_fd : {}",
+            ret
+        );
+        fd
+    }
+
     pub fn read(&self, buf: &mut [u8]) {
         let ptr = buf.as_mut_ptr();
         let ret = unsafe { rpc_port_parcel_burst_read(self.handle, ptr, buf.len() as u32) };