1#[allow(dead_code)]
7#[allow(non_camel_case_types)]
8#[allow(non_upper_case_globals)]
9mod erfs_binding;
10
11use std::slice;
12
13pub use erfs_binding::ErfsRoot;
15
16pub use erfs_binding::ErfsHandle;
18
19pub fn read(fs: ErfsRoot, path: &str) -> Result<&'static [u8], i32> {
21 let mut buf = 0 as *const u8;
22 let mut size :u32 = 0;
23 let pbuf = &mut buf as *mut *const u8;
24 let psize = &mut size as *mut u32;
25
26 let ret :i32;
27 unsafe {
28 ret = erfs_binding::erfs_read(fs, path.as_ptr(), path.len() as u32, pbuf, psize);
29 }
30 if ret == 0 {
31 unsafe {
32 Ok(slice::from_raw_parts(buf, size as usize))
33 }
34 } else {
35 Err(ret)
36 }
37}
38
39pub fn open(fs: ErfsRoot, path: &str) -> Result<(ErfsHandle, u32), i32> {
41 let mut handle: ErfsHandle = 0 as ErfsHandle;
42 let mut size :u32 = 0;
43 let phandle = &mut handle as *mut ErfsHandle;
44 let psize = &mut size as *mut u32;
45
46 let ret :i32;
47 unsafe {
48 ret = erfs_binding::erfs_open(fs, path.as_ptr(), path.len() as u32, phandle, psize);
49 }
50 if ret == 0 {
51 Ok((handle, size as u32))
52 } else {
53 Err(ret)
54 }
55}
56
57pub fn entry_flags(entry: ErfsHandle) -> Result<u32, i32> {
59 let mut flags :u32 = 0;
60 let pflags = &mut flags as *mut u32;
61 let ret:i32;
62 unsafe {
63 ret = erfs_binding::erfs_entryflags(entry, pflags);
64 }
65 if ret == 0 {
66 Ok(flags)
67 } else {
68 Err(ret as i32)
69 }
70}
71
72pub fn entry_size(entry: ErfsHandle) -> Result<u32, i32> {
74 let mut size :u32 = 0;
75 let psize = &mut size as *mut u32;
76 let ret:i32;
77 unsafe {
78 ret = erfs_binding::erfs_entryflags(entry, psize);
79 }
80 if ret == 0 {
81 Ok(size)
82 } else {
83 Err(ret as i32)
84 }
85}
86
87pub fn entry_name(fs: ErfsRoot, entry: ErfsHandle) -> Result<&'static [u8], i32> {
89 let mut buf = 0 as *const u8;
90 let mut size :u32 = 0;
91 let pbuf = &mut buf as *mut *const u8;
92 let psize = &mut size as *mut u32;
93
94 let ret :i32;
95 unsafe {
96 ret = erfs_binding::erfs_entryname(fs, entry, pbuf, psize);
97 }
98 if ret == 0 {
99 unsafe {
100 Ok(slice::from_raw_parts(buf, size as usize))
101 }
102 } else {
103 Err(ret)
104 }
105}
106
107pub fn read_file(fs: ErfsRoot, entry: ErfsHandle) -> Result<&'static [u8], i32> {
109 let mut buf = 0 as *const u8;
110 let mut size :u32 = 0;
111 let pbuf = &mut buf as *mut *const u8;
112 let psize = &mut size as *mut u32;
113
114 let ret :i32;
115 unsafe {
116 ret = erfs_binding::erfs_readfile(fs, entry, pbuf, psize);
117 }
118 if ret == 0 {
119 unsafe {
120 Ok(slice::from_raw_parts(buf, size as usize))
121 }
122 } else {
123 Err(ret)
124 }
125}
126
127pub fn read_dir(fs: ErfsRoot, dir: ErfsHandle, index: u32) -> Result<ErfsHandle, i32> {
129 let mut handle: ErfsHandle = 0 as ErfsHandle;
130 let phandle = &mut handle as *mut ErfsHandle;
131
132 let ret :i32;
133 unsafe {
134 ret = erfs_binding::erfs_readdir(fs, dir, index, phandle);
135 }
136 if ret == 0 {
137 Ok(handle)
138 } else {
139 Err(ret)
140 }
141}
142
143