erfs_rt/
lib.rs

1//! # erfs-rt (Embedded Resource Filesystem - runtime libarary)
2//!
3//! `erfs-rt` access the generated fs.
4
5
6#[allow(dead_code)]
7#[allow(non_camel_case_types)]
8#[allow(non_upper_case_globals)]
9mod erfs_binding;
10
11use std::slice;
12
13/// handle of a ERFS instance, returned by the generated codes.
14pub use erfs_binding::ErfsRoot;
15
16/// handle of a directory entry
17pub use erfs_binding::ErfsHandle;
18
19/// get content of specified file. 
20pub 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
39/// get directory entry handle from pathname.
40pub 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
57/// get flags of the specified directory entry.
58pub 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
72/// get size of the specified directory entry.
73pub 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
87/// get file name of a directory entry
88pub 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
107/// get content of a directory entry
108pub 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
127/// read a directory
128pub 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/*
144use erfs_binding::ErfsVisitFn;
145pub fn erfs_travel(fs: ErfsRoot, func: ErfsVisitFn, ctx: *mut ::std::os::raw::c_void) -> i32 {
146    unsafe { 
147        erfs_binding::erfs_travel(fs, func, ctx) 
148    }
149}
150*/