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,57 @@ 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+             // 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; 
194+     } 
195+ 
196+     const  fn  is_mode_valid ( & self )  -> bool  { 
197+         // Valid Combinations: Read, Read/Write, Read/Write/Create 
198+         self . mode  == file:: MODE_READ 
199+             || self . mode  == ( file:: MODE_READ  | file:: MODE_WRITE ) 
200+             || self . mode  == ( file:: MODE_READ  | file:: MODE_WRITE  | file:: MODE_CREATE ) 
201+     } 
153202} 
154203
155204impl  File  { 
0 commit comments