Beginning of replacing drop with resources

This commit is contained in:
Marijn Haverbeke
2011-07-29 10:55:03 +02:00
parent 4c09d4a770
commit 0ba34d873d
2 changed files with 11 additions and 9 deletions

View File

@@ -55,7 +55,11 @@ fn convert_whence(whence: seek_style) -> int {
ret alt whence { seek_set. { 0 } seek_cur. { 1 } seek_end. { 2 } }; ret alt whence { seek_set. { 0 } seek_cur. { 1 } seek_end. { 2 } };
} }
obj FILE_buf_reader(f: os::libc::FILE, must_close: bool) { resource FILE_res(f: os::libc::FILE) {
os::libc::fclose(f);
}
obj FILE_buf_reader(f: os::libc::FILE, res: option::t[@FILE_res]) {
fn read(len: uint) -> vec[u8] { fn read(len: uint) -> vec[u8] {
let buf = vec::alloc[u8](len); let buf = vec::alloc[u8](len);
let read = os::libc::fread(vec::buf[u8](buf), 1u, len, f); 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) {
fn tell() -> uint { fn tell() -> uint {
ret os::libc::ftell(f) as uint; ret os::libc::ftell(f) as uint;
} }
drop { if must_close { os::libc::fclose(f); } }
} }
@@ -173,13 +176,13 @@ obj new_reader(rdr: buf_reader) {
} }
fn stdin() -> reader { fn stdin() -> reader {
ret new_reader(FILE_buf_reader(rustrt::rust_get_stdin(), false)); ret new_reader(FILE_buf_reader(rustrt::rust_get_stdin(), option::none));
} }
fn file_reader(path: str) -> reader { fn file_reader(path: str) -> reader {
let f = os::libc::fopen(str::buf(path), str::buf("r")); let f = os::libc::fopen(str::buf(path), str::buf("r"));
if f as uint == 0u { log_err "error opening " + path; fail; } if f as uint == 0u { log_err "error opening " + path; fail; }
ret new_reader(FILE_buf_reader(f, true)); ret new_reader(FILE_buf_reader(f, option::some(@FILE_res(f))));
} }
@@ -237,7 +240,7 @@ type buf_writer =
fn tell() -> uint ; fn tell() -> uint ;
}; };
obj FILE_writer(f: os::libc::FILE, must_close: bool) { obj FILE_writer(f: os::libc::FILE, res: option::t[@FILE_res]) {
fn write(v: vec[u8]) { fn write(v: vec[u8]) {
let len = vec::len[u8](v); let len = vec::len[u8](v);
let vbuf = vec::buf[u8](v); let vbuf = vec::buf[u8](v);
@@ -250,7 +253,6 @@ obj FILE_writer(f: os::libc::FILE, must_close: bool) {
fn tell() -> uint { fn tell() -> uint {
ret os::libc::ftell(f) as uint; ret os::libc::ftell(f) as uint;
} }
drop { if must_close { os::libc::fclose(f); } }
} }
obj fd_buf_writer(fd: int, must_close: bool) { obj fd_buf_writer(fd: int, must_close: bool) {
@@ -372,7 +374,7 @@ fn file_writer(path: str, flags: vec[fileflag]) -> writer {
fn buffered_file_buf_writer(path: str) -> buf_writer { fn buffered_file_buf_writer(path: str) -> buf_writer {
let f = os::libc::fopen(str::buf(path), str::buf("w")); let f = os::libc::fopen(str::buf(path), str::buf("w"));
if f as uint == 0u { log_err "error opening " + path; fail; } if f as uint == 0u { log_err "error opening " + path; fail; }
ret FILE_writer(f, true); ret FILE_writer(f, option::some(@FILE_res(f)));
} }

View File

@@ -64,10 +64,10 @@ fn start_program(prog: str, args: vec[str]) -> @program {
ret io::new_writer(io::fd_buf_writer(in_fd, false)); ret io::new_writer(io::fd_buf_writer(in_fd, false));
} }
fn output() -> io::reader { fn output() -> io::reader {
ret io::new_reader(io::FILE_buf_reader(out_file, false)); ret io::new_reader(io::FILE_buf_reader(out_file, option::none));
} }
fn err() -> io::reader { fn err() -> io::reader {
ret io::new_reader(io::FILE_buf_reader(err_file, false)); ret io::new_reader(io::FILE_buf_reader(err_file, option::none));
} }
fn close_input() { fn close_input() {
let invalid_fd = -1; let invalid_fd = -1;