1+ use r_efi:: protocols:: file;
2+
13use crate :: ffi:: OsString ;
24use crate :: fmt;
35use crate :: hash:: Hash ;
@@ -22,7 +24,12 @@ pub struct ReadDir(!);
2224pub struct DirEntry ( !) ;
2325
2426#[ derive( Clone , Debug ) ]
25- pub struct OpenOptions { }
27+ pub struct OpenOptions {
28+ mode : u64 ,
29+ append : bool ,
30+ truncate : bool ,
31+ create_new : bool ,
32+ }
2633
2734#[ derive( Copy , Clone , Debug , Default ) ]
2835pub struct FileTimes { }
@@ -141,15 +148,48 @@ impl DirEntry {
141148
142149impl OpenOptions {
143150 pub fn new ( ) -> OpenOptions {
144- OpenOptions { }
151+ OpenOptions { mode : 0 , append : false , create_new : false , truncate : false }
152+ }
153+
154+ pub fn read ( & mut self , read : bool ) {
155+ if read {
156+ self . mode |= file:: MODE_READ ;
157+ } else {
158+ self . mode &= !file:: MODE_READ ;
159+ }
145160 }
146161
147- pub fn read ( & mut self , _read : bool ) { }
148- pub fn write ( & mut self , _write : bool ) { }
149- pub fn append ( & mut self , _append : bool ) { }
150- pub fn truncate ( & mut self , _truncate : bool ) { }
151- pub fn create ( & mut self , _create : bool ) { }
152- pub fn create_new ( & mut self , _create_new : bool ) { }
162+ pub fn write ( & mut self , write : bool ) {
163+ if write {
164+ self . mode |= file:: MODE_WRITE ;
165+ } else {
166+ self . mode &= !file:: MODE_WRITE ;
167+ }
168+ }
169+
170+ pub fn append ( & mut self , append : bool ) {
171+ // Docs state that `.write(true).append(true)` has the same effect as `.append(true)`
172+ if append {
173+ self . write ( true ) ;
174+ }
175+ self . append = append;
176+ }
177+
178+ pub fn truncate ( & mut self , truncate : bool ) {
179+ self . truncate = truncate;
180+ }
181+
182+ pub fn create ( & mut self , create : bool ) {
183+ if create {
184+ self . mode |= file:: MODE_CREATE ;
185+ } else {
186+ self . mode &= !file:: MODE_CREATE ;
187+ }
188+ }
189+
190+ pub fn create_new ( & mut self , create_new : bool ) {
191+ self . create_new = create_new;
192+ }
153193}
154194
155195impl File {
0 commit comments