Skip to content

Commit e6ed836

Browse files
committed
---
yaml --- r: 4253 b: refs/heads/master c: 0ba34d8 h: refs/heads/master i: 4251: 2d18ffe v: v3
1 parent edfb959 commit e6ed836

File tree

3 files changed

+12
-10
lines changed

3 files changed

+12
-10
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 4c09d4a7707e8fd5d7bd94b164a20d157d3d14d4
2+
refs/heads/master: 0ba34d873dec9853a22f07bf49a136c1695772b0

trunk/src/lib/io.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,11 @@ fn convert_whence(whence: seek_style) -> int {
5555
ret alt whence { seek_set. { 0 } seek_cur. { 1 } seek_end. { 2 } };
5656
}
5757

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]) {
5963
fn read(len: uint) -> vec[u8] {
6064
let buf = vec::alloc[u8](len);
6165
let read = os::libc::fread(vec::buf[u8](buf), 1u, len, f);
@@ -71,7 +75,6 @@ obj FILE_buf_reader(f: os::libc::FILE, must_close: bool) {
7175
fn tell() -> uint {
7276
ret os::libc::ftell(f) as uint;
7377
}
74-
drop { if must_close { os::libc::fclose(f); } }
7578
}
7679

7780

@@ -173,13 +176,13 @@ obj new_reader(rdr: buf_reader) {
173176
}
174177

175178
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));
177180
}
178181

179182
fn file_reader(path: str) -> reader {
180183
let f = os::libc::fopen(str::buf(path), str::buf("r"));
181184
if f as uint == 0u { 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))));
183186
}
184187

185188

@@ -237,7 +240,7 @@ type buf_writer =
237240
fn tell() -> uint ;
238241
};
239242

240-
obj FILE_writer(f: os::libc::FILE, must_close: bool) {
243+
obj FILE_writer(f: os::libc::FILE, res: option::t[@FILE_res]) {
241244
fn write(v: vec[u8]) {
242245
let len = vec::len[u8](v);
243246
let vbuf = vec::buf[u8](v);
@@ -250,7 +253,6 @@ obj FILE_writer(f: os::libc::FILE, must_close: bool) {
250253
fn tell() -> uint {
251254
ret os::libc::ftell(f) as uint;
252255
}
253-
drop { if must_close { os::libc::fclose(f); } }
254256
}
255257

256258
obj fd_buf_writer(fd: int, must_close: bool) {
@@ -372,7 +374,7 @@ fn file_writer(path: str, flags: vec[fileflag]) -> writer {
372374
fn buffered_file_buf_writer(path: str) -> buf_writer {
373375
let f = os::libc::fopen(str::buf(path), str::buf("w"));
374376
if f as uint == 0u { log_err "error opening " + path; fail; }
375-
ret FILE_writer(f, true);
377+
ret FILE_writer(f, option::some(@FILE_res(f)));
376378
}
377379

378380

trunk/src/lib/run_program.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,10 @@ fn start_program(prog: str, args: vec[str]) -> @program {
6464
ret io::new_writer(io::fd_buf_writer(in_fd, false));
6565
}
6666
fn output() -> io::reader {
67-
ret io::new_reader(io::FILE_buf_reader(out_file, false));
67+
ret io::new_reader(io::FILE_buf_reader(out_file, option::none));
6868
}
6969
fn err() -> io::reader {
70-
ret io::new_reader(io::FILE_buf_reader(err_file, false));
70+
ret io::new_reader(io::FILE_buf_reader(err_file, option::none));
7171
}
7272
fn close_input() {
7373
let invalid_fd = -1;

0 commit comments

Comments
 (0)