@@ -50,7 +50,7 @@ cargo run ./foo/
50
50
51
51
52
52
53
- # how to use (old interface in dev branch)
53
+ # how to use
54
54
55
55
## impl BlockDevice Trait
56
56
@@ -99,88 +99,69 @@ let ext4 = Ext4::open(disk);
99
99
100
100
### read regular file
101
101
``` rust
102
- let path = " /test_files/1.txt" ;
103
- let mut ext4_file = Ext4File :: new ();
104
- let r = ext4 . ext4_open (& mut ext4_file , path , " r+" , false );
105
- assert! (r . is_ok (), " open file error {:?}" , r . err ());
106
-
107
- let mut read_buf = vec! [0u8 ; 0x20000000 ];
108
- let mut read_cnt = 0 ;
109
- let r = ext4 . ext4_file_read (& mut ext4_file , & mut read_buf , 0x20000000 , & mut read_cnt );
110
- assert! (r . is_ok (), " open file error {:?}" , r . err ());
102
+ let path = " test_files/0.txt" ;
103
+ let mut read_buf = vec! [0u8 ; READ_SIZE as usize ];
104
+ let child_inode = ext4 . generic_open (path , & mut 2 , false , 0 , & mut 0 ). unwrap ();
105
+ // 1G
106
+ let mut data = vec! [0u8 ; 0x100000 * 1024 as usize ];
107
+ let read_data = ext4 . read_at (child_inode , 0 as usize , & mut data );
108
+ log :: info! (" read data {:?}" , & data [.. 10 ]);
111
109
```
112
110
113
111
### read link
114
112
``` rust
115
- log :: info! (" ----read link file----" );
116
- let path = " /test_files/linktest" ;
117
- let mut ext4_file = Ext4File :: new ();
118
- let r = ext4 . ext4_open (& mut ext4_file , path , " r+" , false );
119
- assert! (r . is_ok (), " open link error {:?}" , r . err ());
120
-
121
- let mut read_buf = vec! [0u8 ; 0x1000 ];
122
- let mut read_cnt = 0 ;
123
- let r = ext4 . ext4_file_read (& mut ext4_file , & mut read_buf , 0x1000 , & mut read_cnt );
124
- assert! (r . is_ok (), " read link error {:?}" , r . err ());
125
- log :: info! (" read data sample {:x?}" , & read_buf [0 .. 10 ]);
113
+ let path = " test_files/linktest" ;
114
+ let mut read_buf = vec! [0u8 ; READ_SIZE as usize ];
115
+ // 2 is root inode
116
+ let child_inode = ext4 . generic_open (path , & mut 2 , false , 0 , & mut 0 ). unwrap ();
117
+ let mut data = vec! [0u8 ; 0x100000 * 1024 as usize ];
118
+ let read_data = ext4 . read_at (child_inode , 0 as usize , & mut data );
119
+ log :: info! (" read data {:?}" , & data [.. 10 ]);
126
120
```
127
121
128
122
### mkdir
129
- ``` rust
123
+ ``` rust
130
124
for i in 0 .. 10 {
131
125
let path = format! (" dirtest{}" , i );
132
126
let path = path . as_str ();
133
- let r = ext4 . ext4_dir_mk (& path );
127
+ let r = ext4 . dir_mk (& path );
134
128
assert! (r . is_ok (), " dir make error {:?}" , r . err ());
135
129
}
130
+ let path = " dir1/dir2/dir3/dir4/dir5/dir6" ;
131
+ let r = ext4 . dir_mk (& path );
132
+ assert! (r . is_ok (), " dir make error {:?}" , r . err ());
136
133
```
137
134
138
135
### file write test
139
136
``` rust
140
- const WRITE_SIZE : usize = 0x400000 ;
141
- let path = format! (" dirtest{}/write_{}.txt" , i , i );
142
- let path = path . as_str ();
143
- let mut ext4_file = Ext4File :: new ();
144
- let r = ext4 . ext4_open (& mut ext4_file , path , " w+" , true );
145
- assert! (r . is_ok (), " open file error {:?}" , r . err ());
146
-
147
- let write_data = vec! [0x41 + i as u8 ; WRITE_SIZE ];
148
- ext4 . ext4_file_write (& mut ext4_file , & write_data , WRITE_SIZE );
149
-
150
- // test
151
- let r = ext4 . ext4_open (& mut ext4_file , path , " r+" , false );
152
- assert! (r . is_ok (), " open file error {:?}" , r . err ());
153
-
154
- let mut read_buf = vec! [0u8 ; WRITE_SIZE ];
155
- let mut read_cnt = 0 ;
156
- let r = ext4 . ext4_file_read (& mut ext4_file , & mut read_buf , WRITE_SIZE , & mut read_cnt );
157
- assert! (r . is_ok (), " open file error {:?}" , r . err ());
158
- assert_eq! (write_data , read_buf );
137
+ // file create/write
138
+ let inode_mode = InodeFileType :: S_IFREG . bits ();
139
+ let inode_ref = ext4 . create (ROOT_INODE , " 511M.txt" , inode_mode ). unwrap ();
140
+
141
+ // test 511M for 512M we need split the extent tree
142
+ const WRITE_SIZE : usize = (0x100000 * 511 );
143
+ let write_buf = vec! [0x41 as u8 ; WRITE_SIZE ];
144
+ let r = ext4 . write_at (inode_ref . inode_num, 0 , & write_buf );
159
145
```
160
146
161
147
162
148
### ls
163
149
``` rust
164
- let path = " test_files" ;
165
- let mut ext4_file = Ext4File :: new ();
166
- let r = ext4 . ext4_open (& mut ext4_file , path , " r+" , false );
167
- assert! (r . is_ok (), " open link error {:?}" , r . err ());
168
-
169
- let de = ext4 . read_dir_entry (ext4_file . inode as _ );
170
- for i in de . iter () {
171
- log :: info! (" {:?}" , i . get_name ());
150
+ let entries = ext4 . dir_get_entries (ROOT_INODE );
151
+ log :: info! (" dir ls root" );
152
+ for entry in entries {
153
+ log :: info! (" {:?}" , entry . get_name ());
172
154
}
173
155
```
174
156
175
157
### file remove
176
158
``` rust
177
159
let path = " test_files/file_to_remove" ;
178
- let r = ext4 . ext4_file_remove (& path );
160
+ let r = ext4 . file_remove (& path );
179
161
```
180
162
181
163
### dir remove
182
164
``` rust
183
165
let path = " dir_to_remove" ;
184
- // remove dir from root inode 2
185
- let r = ext4 . ext4_dir_remove (2 , & path );
166
+ let r = ext4 . dir_remove (ROOT_INODE , & path );
186
167
```
0 commit comments