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,58 @@ 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+ }
160+ }
161+
162+ pub fn write ( & mut self , write : bool ) {
163+ if write {
164+ // Valid Combinations: Read, Read/Write, Read/Write/Create
165+ self . read ( true ) ;
166+ self . mode |= file:: MODE_WRITE ;
167+ } else {
168+ self . mode &= !file:: MODE_WRITE ;
169+ }
170+ }
171+
172+ pub fn append ( & mut self , append : bool ) {
173+ // Docs state that `.write(true).append(true)` has the same effect as `.append(true)`
174+ if append {
175+ self . write ( true ) ;
176+ }
177+ self . append = append;
178+ }
179+
180+ pub fn truncate ( & mut self , truncate : bool ) {
181+ self . truncate = truncate;
182+ }
183+
184+ pub fn create ( & mut self , create : bool ) {
185+ if create {
186+ self . mode |= file:: MODE_CREATE ;
187+ } else {
188+ self . mode &= !file:: MODE_CREATE ;
189+ }
190+ }
191+
192+ pub fn create_new ( & mut self , create_new : bool ) {
193+ self . create_new = create_new;
145194 }
146195
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 ) { }
196+ #[ expect( dead_code) ]
197+ const fn is_mode_valid ( & self ) -> bool {
198+ // Valid Combinations: Read, Read/Write, Read/Write/Create
199+ self . mode == file:: MODE_READ
200+ || self . mode == ( file:: MODE_READ | file:: MODE_WRITE )
201+ || self . mode == ( file:: MODE_READ | file:: MODE_WRITE | file:: MODE_CREATE )
202+ }
153203}
154204
155205impl File {
0 commit comments