@@ -55,7 +55,11 @@ fn convert_whence(whence: seek_style) -> int {
55
55
ret alt whence { seek_set. { 0 } seek_cur. { 1 } seek_end. { 2 } } ;
56
56
}
57
57
58
- obj FILE_buf_reader ( f: os:: libc:: FILE , must_close: bool ) {
58
+ resource FILE_res ( f: os:: libc:: FILE ) {
59
+ os:: libc:: fclose ( f) ;
60
+ }
61
+
62
+ obj FILE_buf_reader ( f: os:: libc:: FILE , res: option:: t[ @FILE_res ] ) {
59
63
fn read ( len : uint ) -> vec[ u8 ] {
60
64
let buf = vec:: alloc[ u8] ( len) ;
61
65
let read = os:: libc:: fread ( vec:: buf[ u8] ( buf) , 1 u, len, f) ;
@@ -71,7 +75,6 @@ obj FILE_buf_reader(f: os::libc::FILE, must_close: bool) {
71
75
fn tell ( ) -> uint {
72
76
ret os:: libc:: ftell ( f) as uint ;
73
77
}
74
- drop { if must_close { os : : libc:: fclose ( f) ; } }
75
78
}
76
79
77
80
@@ -173,13 +176,13 @@ obj new_reader(rdr: buf_reader) {
173
176
}
174
177
175
178
fn stdin ( ) -> reader {
176
- ret new_reader ( FILE_buf_reader ( rustrt:: rust_get_stdin ( ) , false ) ) ;
179
+ ret new_reader ( FILE_buf_reader ( rustrt:: rust_get_stdin ( ) , option :: none ) ) ;
177
180
}
178
181
179
182
fn file_reader ( path : str ) -> reader {
180
183
let f = os:: libc:: fopen ( str:: buf ( path) , str:: buf ( "r" ) ) ;
181
184
if f as uint == 0 u { log_err "error opening " + path; fail; }
182
- ret new_reader( FILE_buf_reader ( f, true ) ) ;
185
+ ret new_reader( FILE_buf_reader ( f, option :: some ( @ FILE_res ( f ) ) ) ) ;
183
186
}
184
187
185
188
@@ -237,7 +240,7 @@ type buf_writer =
237
240
fn tell ( ) -> uint ;
238
241
} ;
239
242
240
- obj FILE_writer ( f: os:: libc:: FILE , must_close : bool ) {
243
+ obj FILE_writer ( f: os:: libc:: FILE , res : option :: t [ @ FILE_res ] ) {
241
244
fn write ( v : vec[ u8 ] ) {
242
245
let len = vec:: len[ u8] ( v) ;
243
246
let vbuf = vec:: buf[ u8] ( v) ;
@@ -250,7 +253,6 @@ obj FILE_writer(f: os::libc::FILE, must_close: bool) {
250
253
fn tell ( ) -> uint {
251
254
ret os:: libc:: ftell ( f) as uint ;
252
255
}
253
- drop { if must_close { os : : libc:: fclose ( f) ; } }
254
256
}
255
257
256
258
obj fd_buf_writer ( fd: int, must_close: bool ) {
@@ -372,7 +374,7 @@ fn file_writer(path: str, flags: vec[fileflag]) -> writer {
372
374
fn buffered_file_buf_writer ( path : str ) -> buf_writer {
373
375
let f = os:: libc:: fopen ( str:: buf ( path) , str:: buf ( "w" ) ) ;
374
376
if f as uint == 0 u { log_err "error opening " + path; fail; }
375
- ret FILE_writer ( f, true ) ;
377
+ ret FILE_writer ( f, option :: some ( @ FILE_res ( f ) ) ) ;
376
378
}
377
379
378
380
0 commit comments