Commit Graph

165 Commits

Author SHA1 Message Date
bors 0ede2ea4e2 auto merge of #9749 : alexcrichton/rust/less-io, r=brson
This implements a number of the baby steps needed to start eliminating everything inside of `std::io`. It turns out that there are a *lot* of users of that module, so I'm going to try to tackle them separately instead of bringing down the whole system all at once.

This pull implements a large amount of unimplemented functionality inside of `std::rt::io` including:

* Native file I/O (file descriptors, *FILE)
* Native stdio (through the native file descriptors)
* Native processes (extracted from `std::run`)

I also found that there are a number of users of `std::io` which desire to read an input line-by-line, so I added an implementation of `read_until` and `read_line` to `BufferedReader`.

With all of these changes in place, I started to axe various usages of `std::io`. There's a lot of one-off uses here-and-there, but the major use-case remaining that doesn't have a fantastic solution is `extra::json`. I ran into a few compiler bugs when attempting to remove that, so I figured I'd come back to it later instead. 

There is one fairly major change in this pull, and it's moving from native stdio to uv stdio via `print` and `println`. Unfortunately logging still goes through native I/O (via `dumb_println`). This is going to need some thinking, because I still want the goal of logging/printing to be 0 allocations, and this is not possible if `io::stdio::stderr()` is called on each log message. Instead I think that this may need to be cached as the `logger` field inside the `Task` struct, but that will require a little more workings to get right (this is also a similar problem for print/println, do we cache `stdout()` to not have to re-create it every time?).
2013-10-10 04:31:24 -07:00
Alex Crichton 413747176c Make the file::DirectoryInfo trait public
This was just a mistake that it was hidden.
2013-10-10 03:38:51 -07:00
Alex Crichton 2290ce14f2 Remove some users of io::file_reader 2013-10-10 03:38:51 -07:00
Alex Crichton b07ab1fe4b Migrate users of io::fd_t to io::native::file::fd_t 2013-10-10 03:38:51 -07:00
Alex Crichton ee1e6529bd Implement BufferedReader.{read_until, read_line}
These two functions will be useful when replacing various other counterparts
used by std::io consumers.
2013-10-10 03:38:51 -07:00
Alex Crichton facefa7c8d Implement rt::io::stdio
Additionally, this moves the prelude imports of print/println from std::io to
std::rt::io.

Closes #6846
2013-10-10 03:38:51 -07:00
bors 2b978af227 auto merge of #9780 : sfackler/rust/extensions2, r=alexcrichton
This works around #9779, but is probably the right thing to do anyways
since that's the module where all of the documentation for those traits
lives.
2013-10-09 20:46:21 -07:00
Alex Crichton a0d2f71e8e Implement io::native::process 2013-10-09 11:24:15 -07:00
Alex Crichton edf4c16997 Implement io::native::stdio 2013-10-09 11:21:47 -07:00
Alex Crichton b509f7905a Implement io::native::file 2013-10-09 11:21:47 -07:00
Daniel Micay 6a90e80b62 option: rewrite the API to use composition 2013-10-09 09:17:29 -04:00
Steven Fackler 3c62ed6578 Make std::rt::io::extensions public
This works around #9779, but is probably the right thing to do anyways
since that's the module where all of the documentation for those traits
lives.
2013-10-08 23:36:26 -07:00
Alex Crichton de7d143176 Fix existing privacy/visibility violations
This commit fixes all of the fallout of the previous commit which is an attempt
to refine privacy. There were a few unfortunate leaks which now must be plugged,
and the most horrible one is the current `shouldnt_be_public` module now inside
`std::rt`. I think that this either needs a slight reorganization of the
runtime, or otherwise it needs to just wait for the external users of these
modules to get replaced with their `rt` implementations.

Other fixes involve making things pub which should be pub, and otherwise
updating error messages that now reference privacy instead of referencing an
"unresolved name" (yay!).
2013-10-07 13:00:52 -07:00
Steven Fackler 435ca16f4f Close out #9155
Add a test to make sure it works and switch a private struct over to a
newtype.

Closes #9155
2013-10-03 00:15:54 -07:00
Steven Fackler 019b131e12 Stop using newtype wrappers in std::rt::io
UnboundedPipeStream is still a newtype since process::set_stdio needs to
look into its internals.

Closes #9667
2013-10-02 20:37:17 -07:00
bors 88b0b511be auto merge of #9578 : alexcrichton/rust/un-ignore-libuv-process-tests, r=brson
Closes #9341
2013-10-01 17:41:29 -07:00
Alex Crichton 02cbfce0b3 Move the rt::io::process tests to run-pass
Closes #9341
2013-10-01 17:04:17 -07:00
Alex Crichton a8ba31dbf3 std: Remove usage of fmt! 2013-09-30 23:21:18 -07:00
Steven Fackler fe9b1e29fc Visibility fixes 2013-09-26 22:01:33 -07:00
Steven Fackler d8957e6332 Some struct visibility fixes 2013-09-25 19:42:02 -07:00
Alex Crichton 3585c64d09 rustdoc: Change all code-blocks with a script
find src -name '*.rs' | xargs sed -i '' 's/~~~.*{\.rust}/```rust/g'
    find src -name '*.rs' | xargs sed -i '' 's/ ~~~$/ ```/g'
    find src -name '*.rs' | xargs sed -i '' 's/^~~~$/ ```/g'
2013-09-25 14:27:42 -07:00
bors a7d68adbdd auto merge of #9336 : alexcrichton/rust/issue-7981, r=catamorphism
Progress on #7981

This doesn't completely close the issue because `struct A;` is still allowed, and it's a much larger change to disallow that. I'm also not entirely sure that we want to disallow that. Regardless, punting that discussion to the issue instead.
2013-09-24 15:45:57 -07:00
Alex Crichton 4b266f1c0d Stop accepting 'impl ...;', require {} instead
Progress on #7981
2013-09-24 14:12:02 -07:00
Jeff Olson c6e5b86db6 std: add file::io::test module and ensure correct build 2013-09-21 14:15:58 -07:00
Jeff Olson 6ebb364d80 std: cleanup file::io rustdoc_ng output 2013-09-21 14:15:58 -07:00
bors e5fdc7dee5 auto merge of #9320 : chris-morgan/rust/unreachable-macro-part-two-of-two-containing-the-destruction-of-the-unreachable-function, r=alexcrichton
This is the second of two parts of #8991, now possible as a new snapshot
has been made. (The first part implemented the unreachable!() macro; it
was #8992, 6b7b8f2682.)

``std::util::unreachable()`` is removed summarily; any code which used
it should now use the ``unreachable!()`` macro.

Closes #9312.

Closes #8991.
2013-09-20 00:36:11 -07:00
Alex Crichton 5165ecde66 Ignore io::process tests
They're causing syscalls to get interrupted, and std::io doesn't correctly
handle EINTR
2013-09-19 15:17:29 -07:00
Chris Morgan e2807a4565 Replace unreachable() calls with unreachable!().
This is the second of two parts of #8991, now possible as a new snapshot
has been made. (The first part implemented the unreachable!() macro; it
was #8992, 6b7b8f2682.)

``std::util::unreachable()`` is removed summarily; any code which used
it should now use the ``unreachable!()`` macro.

Closes #9312.

Closes #8991.
2013-09-19 15:04:03 +10:00
Alex Crichton cb7756a81d Implement process bindings to libuv
This is a re-landing of #8645, except that the bindings are *not* being used to
power std::run just yet. Instead, this adds the bindings as standalone bindings
inside the rt::io::process module.

I made one major change from before, having to do with how pipes are
created/bound. It's much clearer now when you can read/write to a pipe, as
there's an explicit difference (different types) between an unbound and a bound
pipe. The process configuration now takes unbound pipes (and consumes ownership
of them), and will return corresponding pipe structures back if spawning is
successful (otherwise everything is destroyed normally).
2013-09-18 13:52:18 -07:00
Alex Crichton 817576ee70 Register new snapshots 2013-09-18 11:07:22 -07:00
Jeff Olson a5275ffd5c std: whitespace clean up io::file docs 2013-09-17 10:14:15 -07:00
Jeff Olson 95ef1f5415 std: docstring fixes in io::file 2013-09-16 23:36:39 -07:00
Jeff Olson 56c87ffb30 std: minor cleanup in some io_error descs in io::file 2013-09-16 23:19:24 -07:00
Jeff Olson d3ed9a9e3b std: lots of docs for std::rt::io::file
i hope they don't bitrot
2013-09-16 23:19:24 -07:00
Jeff Olson e9acdd9392 std: generlize & move io::file::suppressed_stat to io::ignore_io_error 2013-09-16 23:19:24 -07:00
Jeff Olson e741449ea1 std: unignore some file io tests that work on windows, now 2013-09-16 23:19:24 -07:00
Jeff Olson bf399d558e std: bind uv_fs_readdir(), flesh out DirectoryInfo and docs/cleanup 2013-09-16 23:19:24 -07:00
Jeff Olson 25b4d8c1d7 std: expose more stat info 2013-09-16 23:19:23 -07:00
Jeff Olson 71c7798d66 std: clean up Dir/FileInfo inheritence and flesh out Dir Info 2013-09-16 23:17:47 -07:00
Jeff Olson b49fc4cf4e std: adding file::{stat,mkdir,rmdir}, FileInfo and FileReader/FileWriter
add ignores for win32 tests on previous file io stuff...
2013-09-16 23:17:46 -07:00
Jeff Olson af650572e0 std/rt: in-progress file io work
std: remove unneeded field from RequestData struct

std: rt::uv::file - map us_fs_stat & start refactoring calls into FsRequest

std: stubbing out stat calls from the top-down into uvio

std: us_fs_* operations are now by-val self methods on FsRequest

std: post-rebase cleanup

std: add uv_fs_mkdir|rmdir + tests & minor test cleanup in rt::uv::file

WORKING: fleshing out FileStat and FileInfo + tests

std: reverting test files..

refactoring back and cleanup...
2013-09-16 23:17:46 -07:00
bors d5e9033a0d auto merge of #9108 : blake2-ppc/rust/hazards-on-overflow, r=alexcrichton
Fix uint overflow bugs in std::{at_vec, vec, str}

Closes #8742

Fix issue #8742, which summarized is: unsafe code in vec and str did assume
that a reservation for `X + Y` elements always succeeded, and didn't overflow.

Introduce the method `Vec::reserve_additional(n)` to make it easy to check for
overflow in `Vec::push` and `Vec::push_all`.

In std::str, simplify and remove a lot of the unsafe code and use `push_str`
instead. With improvements to `.push_str` and the new function
`vec::bytes::push_bytes`, it looks like this change has either no or positive
impact on performance.

I believe there are many places still where `v.reserve(A + B)` still can overflow.
This by itself is not an issue unless followed by (unsafe) code that steps aside
boundary checks.
2013-09-16 19:35:50 -07:00
blake2-ppc 6e538edea2 rt::io: Use vec::reserve_additional 2013-09-17 02:48:00 +02:00
klutzy 3686c6cbcf std::rt::io::net::tcp: Fix one tcp test on Win32
Fixes `connect_error` part of #8811.
2013-09-16 03:45:20 +09:00
klutzy 1e745f1679 std::rt::io::support: Fix ignored test on Win32
Assumes drive C: exists.

Closes #8812.
2013-09-16 03:30:10 +09:00
klutzy d2ce83ccb1 std::rt::io::file: Enable I/O tests on Win32
Enable blocked tests which are now fixed by #9165.

Closes #8810.
2013-09-15 23:20:33 +09:00
bors 5c4f65e6f5 auto merge of #9191 : huonw/rust/are-you-tired, r=cmr
Allows `std::rt::io::timer::sleep(1000)` rather than `std::rt::io::timer::Timer::new().unwrap().sleep(1000)`.
2013-09-14 14:05:51 -07:00
Huon Wilson f39ab75a78 std::rt: Add a standalone sleep function. 2013-09-15 00:20:48 +10:00
bors fbafb41fff auto merge of #9156 : sfackler/rust/buffered-fix, r=huonw
This is a workaround for #9155. Currently, any uses of BufferedStream
outside of libstd ICE.
2013-09-14 01:16:00 -07:00
Steven Fackler ef964a162f Stop using newtypes in rt::io::buffered
This is a workaround for #9155. Currently, any uses of BufferedStream
outside of libstd ICE.
2013-09-12 21:48:47 -07:00