diff options
| author | Brian Anderson <[email protected]> | 2011-02-22 18:58:07 -0500 |
|---|---|---|
| committer | Brian Anderson <[email protected]> | 2011-02-22 21:52:23 -0500 |
| commit | c4df39609c9c09c450dd8fe5905a8e6fbeb5f181 (patch) | |
| tree | 1dc8fb985c2b6e406df0c2a1f9ff15963b8c87fc /src/lib/_io.rs | |
| parent | rustc: Perform explicit type substitution as requested by the programmer (diff) | |
| download | rust-c4df39609c9c09c450dd8fe5905a8e6fbeb5f181.tar.xz rust-c4df39609c9c09c450dd8fe5905a8e6fbeb5f181.zip | |
Rename std._io to std.io since 'io' is no longer a keyword
Diffstat (limited to 'src/lib/_io.rs')
| -rw-r--r-- | src/lib/_io.rs | 183 |
1 files changed, 0 insertions, 183 deletions
diff --git a/src/lib/_io.rs b/src/lib/_io.rs deleted file mode 100644 index f285f6c8..00000000 --- a/src/lib/_io.rs +++ /dev/null @@ -1,183 +0,0 @@ -import std.os.libc; -import std._str; -import std._vec; - - -type stdio_reader = state obj { - fn getc() -> int; - fn ungetc(int i); -}; - -fn new_stdio_reader(str path) -> stdio_reader { - state obj stdio_FILE_reader(os.libc.FILE f) { - fn getc() -> int { - ret os.libc.fgetc(f); - } - fn ungetc(int i) { - os.libc.ungetc(i, f); - } - drop { - os.libc.fclose(f); - } - } - auto FILE = os.libc.fopen(_str.buf(path), _str.buf("r")); - check (FILE as uint != 0u); - ret stdio_FILE_reader(FILE); -} - - -type buf_reader = state obj { - fn read() -> vec[u8]; -}; - -type buf_writer = state obj { - fn write(vec[u8] v); -}; - -fn default_bufsz() -> uint { - ret 4096u; -} - -fn new_buf() -> vec[u8] { - ret _vec.alloc[u8](default_bufsz()); -} - -fn new_buf_reader(str path) -> buf_reader { - - state obj fd_buf_reader(int fd, mutable vec[u8] buf) { - - fn read() -> vec[u8] { - - // Ensure our buf is singly-referenced. - if (_vec.rustrt.refcount[u8](buf) != 1u) { - buf = new_buf(); - } - - auto len = default_bufsz(); - auto vbuf = _vec.buf[u8](buf); - auto count = os.libc.read(fd, vbuf, len); - - if (count < 0) { - log "error filling buffer"; - log sys.rustrt.last_os_error(); - fail; - } - - _vec.len_set[u8](buf, count as uint); - ret buf; - } - - drop { - os.libc.close(fd); - } - } - - auto fd = os.libc.open(_str.buf(path), - os.libc_constants.O_RDONLY() | - os.libc_constants.O_BINARY(), - 0u); - - if (fd < 0) { - log "error opening file for reading"; - log sys.rustrt.last_os_error(); - fail; - } - ret fd_buf_reader(fd, new_buf()); -} - -/** - * FIXME (issue #150): This should be - * - * type fileflag = tag(append(), create(), truncate()); - * - * but then the tag value ctors are not found from crate-importers of std, so - * we manually simulate the enum below. - */ -type fileflag = uint; -fn append() -> uint { ret 0u; } -fn create() -> uint { ret 1u; } -fn truncate() -> uint { ret 2u; } - -fn new_buf_writer(str path, vec[fileflag] flags) -> buf_writer { - - state obj fd_buf_writer(int fd) { - - fn write(vec[u8] v) { - auto len = _vec.len[u8](v); - auto count = 0u; - auto vbuf; - while (count < len) { - vbuf = _vec.buf_off[u8](v, count); - auto nout = os.libc.write(fd, vbuf, len); - if (nout < 0) { - log "error dumping buffer"; - log sys.rustrt.last_os_error(); - fail; - } - count += nout as uint; - } - } - - drop { - os.libc.close(fd); - } - } - - let int fflags = - os.libc_constants.O_WRONLY() | - os.libc_constants.O_BINARY(); - - for (fileflag f in flags) { - alt (f) { - // FIXME (issue #150): cf comment above defn of fileflag type - //case (append()) { fflags |= os.libc_constants.O_APPEND(); } - //case (create()) { fflags |= os.libc_constants.O_CREAT(); } - //case (truncate()) { fflags |= os.libc_constants.O_TRUNC(); } - case (0u) { fflags |= os.libc_constants.O_APPEND(); } - case (1u) { fflags |= os.libc_constants.O_CREAT(); } - case (2u) { fflags |= os.libc_constants.O_TRUNC(); } - } - } - - auto fd = os.libc.open(_str.buf(path), - fflags, - os.libc_constants.S_IRUSR() | - os.libc_constants.S_IWUSR()); - - if (fd < 0) { - log "error opening file for writing"; - log sys.rustrt.last_os_error(); - fail; - } - ret fd_buf_writer(fd); -} - -type writer = - state obj { - fn write_str(str s); - fn write_int(int n); - fn write_uint(uint n); - }; - -fn file_writer(str path, - vec[fileflag] flags) - -> writer -{ - state obj fw(buf_writer out) { - fn write_str(str s) { out.write(_str.bytes(s)); } - fn write_int(int n) { out.write(_str.bytes(_int.to_str(n, 10u))); } - fn write_uint(uint n) { out.write(_str.bytes(_uint.to_str(n, 10u))); } - } - 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: -// |