Add stdio_reader to io, just use FILE* values for now. We have things to do.

This commit is contained in:
Graydon Hoare 2010-08-18 15:40:27 -07:00
parent b4f92774d0
commit f0d4e6c511
4 changed files with 46 additions and 1 deletions

View File

@ -1,7 +1,26 @@
import std.os;
import std.os.libc;
import std._str;
import std._vec;
type stdio_reader = unsafe obj {
fn getc() -> int;
};
fn new_stdio_reader(str path) -> stdio_reader {
unsafe obj stdio_FILE_reader(os.libc.FILE f) {
fn getc() -> int {
ret os.libc.fgetc(f);
}
drop {
os.libc.fclose(f);
}
}
ret stdio_FILE_reader(os.libc.fopen(_str.buf(path),
_str.buf("r")));
}
type buf_reader = unsafe obj {
fn read() -> vec[u8];
};
@ -130,3 +149,14 @@ fn file_writer(str path,
}
ret fw(new_buf_writer(path, flags));
}
//
// Local Variables:
// mode: rust
// fill-column: 78;
// indent-tabs-mode: nil
// c-basic-offset: 4
// buffer-file-coding-system: utf-8-unix
// compile-command: "make -k -C .. 2>&1 | sed -e 's/\\/x\\//x:\\//g'";
// End:
//

View File

@ -8,6 +8,11 @@ native mod libc = "libc.so.6" {
fn write(int fd, vbuf buf, uint count) -> int;
fn close(int fd) -> int;
type FILE;
fn fopen(sbuf path, sbuf mode) -> FILE;
fn fclose(FILE f);
fn fgetc(FILE f) -> int;
type dir;
// readdir is a mess; handle via wrapper function in rustrt.
fn opendir(sbuf d) -> dir;

View File

@ -8,6 +8,11 @@ native mod libc = "libc.dylib" {
fn write(int fd, vbuf buf, uint count) -> int;
fn close(int fd) -> int;
type FILE;
fn fopen(sbuf path, sbuf mode) -> FILE;
fn fclose(FILE f);
fn fgetc(FILE f) -> int;
type dir;
// readdir is a mess; handle via wrapper function in rustrt.
fn opendir(sbuf d) -> dir;

View File

@ -6,6 +6,11 @@ native mod libc = "msvcrt.dll" {
fn read(int fd, vbuf buf, uint count) -> int = "_read";
fn write(int fd, vbuf buf, uint count) -> int = "_write";
fn close(int fd) -> int = "_close";
type FILE;
fn fopen(sbuf path, sbuf mode) -> FILE;
fn fclose(FILE f);
fn fgetc(FILE f) -> int;
}
mod libc_constants {