summary refs log tree commit diff
path: root/src/libstd
AgeCommit message (Collapse)AuthorLines
2015-07-10Auto merge of #26751 - retep998:copy-that-floppy, r=alexcrichtonbors-16/+93
Using the OS mechanism for copying files allows the OS to optimize the transfer using stuff such as [Offloaded Data Transfers (ODX)](https://msdn.microsoft.com/en-us/library/windows/desktop/hh848056%28v=vs.85%29.aspx). Also preserves a lot more information, including NTFS [File Streams](https://msdn.microsoft.com/en-us/library/windows/desktop/aa364404%28v=vs.85%29.aspx), which the manual implementation threw away. In addition, it is an atomic operation, unlike the manual implementation which has extra calls for copying over permissions. r? @alexcrichton
2015-07-10Remove the generic `fill_bytes_buf` functionTobias Bucher-31/+13
2015-07-10Use CopyFileEx for fs::copy on WindowsPeter Atashian-16/+93
Adds a couple more tests for fs::copy Signed-off-by: Peter Atashian <retep998@gmail.com>
2015-07-09Test that CStr and CString have equivalent hashes.Jonathan Reem-1/+16
2015-07-09Implement Borrow<CStr> for CString and ToOwned for CStrJonathan Reem-1/+24
This allows CString and CStr to be used with the Cow type, which is extremely useful when interfacing with C libraries that make extensive use of C-style strings.
2015-07-09Expand documentation for the primitive type arrayUlrik Sverdrup-6/+35
2015-07-09Auto merge of #26766 - jespino:add-more-filetypes, r=alexcrichtonbors-2/+28
I find that isn't supported on the current API and I think is necesary. It is my first PR to rust (I'm not a rust expert and I'm not sure if this is the better way to propose this thinks), of course any suggestion of change will be welcome. I'm almost sure that in windows aren't supported this filetypes, then, i put in the api of win::fs the functions with a fixed false in the response, I hope this is correct.
2015-07-09Auto merge of #26814 - tshepang:array-examples, r=blussbors-0/+13
2015-07-09Address some comments on the pull requestTobias Bucher-40/+25
2015-07-09Auto merge of #26904 - bluss:no-repeat, r=alexcrichtonbors-7/+7
In a followup to PR #26849, improve one more location for I/O where we can use `Vec::resize` to ensure better performance when zeroing buffers. Use the `vec![elt; n]` macro everywhere we can in the tree. It replaces `repeat(elt).take(n).collect()` which is more verbose, requires type hints, and right now produces worse code. `vec![]` is preferable for vector initialization. The `vec![]` replacement touches upon one I/O path too, Stdin::read for windows, and that should be a small improvement. r? @alexcrichton
2015-07-09Use vec![elt; n] where possibleUlrik Sverdrup-5/+4
The common pattern `iter::repeat(elt).take(n).collect::<Vec<_>>()` is exactly equivalent to `vec![elt; n]`, do this replacement in the whole tree. (Actually, vec![] is smart enough to only call clone n - 1 times, while the former solution would call clone n times, and this fact is virtually irrelevant in practice.)
2015-07-09Add FileTypeUnix trait to add unix special file typesJesús Espino-2/+28
2015-07-09io: Use Vec::resize in Cursor<Vec<u8>> for more efficient zero fillUlrik Sverdrup-2/+3
Vec::resize compiles to better code than .extend(repeat(0).take(n)) does right now.
2015-07-08Auto merge of #26849 - bluss:read-to-end-memset, r=alexcrichtonbors-6/+12
Improve zerofill in Vec::resize and Read::read_to_end We needed a more efficient way to zerofill the vector in read_to_end. This to reduce the memory intialization overhead to a minimum. Use the implementation of `std::vec::from_elem` (used for the vec![] macro) for Vec::resize as well. For simple element types like u8, this compiles to memset, so it makes Vec::resize much more efficient.
2015-07-08Stdin::read_line: read_line does not need a mutable borrowRalf Jung-1/+1
2015-07-08Make `std::env::current_dir` work for path names longer than 2048 bytes on ↵Tobias Bucher-10/+49
non-Windows
2015-07-08io: Simplify BufReader::with_capacityUlrik Sverdrup-4/+1
Use the vec![] macro directly to create a sized, zeroed vector. This should result in a big speedup when creating BufReader, because vec![0; cap] compiles to a memset call, while the previous extend code currently did not.
2015-07-08Improve Vec::resize so that it can be used in Read::read_to_endUlrik Sverdrup-2/+11
We needed a more efficient way to zerofill the vector in read_to_end. This to reduce the memory intialization overhead to a minimum. Use the implementation of `std::vec::from_elem` (used for the vec![] macro) for Vec::resize as well. For simple element types like u8, this compiles to memset, so it makes Vec::resize much more efficient.
2015-07-08Rollup merge of #26784 - birkenfeld:patch-2, r=steveklabnikSteve Klabnik-8/+8
* fix probable copy-paste error in BufWriter.get_mut() * more consistent punctuation
2015-07-06Auto merge of #26741 - alexcrichton:noinline-destructors, r=brsonbors-8/+20
This PR was originally going to be a "let's start running tests on MSVC" PR, but it didn't quite get to that point. It instead gets us ~80% of the way there! The steps taken in this PR are: * Landing pads are turned on by default for 64-bit MSVC. The LLVM support is "good enough" with the caveat the destructor glue is now marked noinline. This was recommended [on the associated bug](https://llvm.org/bugs/show_bug.cgi?id=23884) as a stopgap until LLVM has a better representation for exception handling in MSVC. The consequence of this is that MSVC will have a bit of a perf hit, but there are possible routes we can take if this workaround sticks around for too long. * The linker (`link.exe`) is now looked up in the Windows Registry if it's not otherwise available in the environment. This improves using the compiler outside of a VS shell (e.g. in a MSYS shell or in a vanilla cmd.exe shell). This also makes cross compiles via Cargo "just work" when crossing between 32 and 64 bit! * TLS destructors were fixed to start running on MSVC (they previously weren't running at all) * A few assorted `run-pass` tests were fixed. * The dependency on the `rust_builtin` library was removed entirely for MSVC to try to prevent any `cl.exe` compiled objects get into the standard library. This should help us later remove any dependence on the CRT by the standard library. * I re-added `rust_try_msvc_32.ll` for 32-bit MSVC and ensured that landing pads were turned off by default there as well. Despite landing pads being enabled, there are still *many* failing tests on MSVC. The two major classes I've identified so far are: * Spurious aborts. It appears that when optimizations are enabled that landing pads aren't always lined up properly, and sometimes an exception being thrown can't find the catch block down the stack, causing the program to abort. I've been working to reduce this test case but haven't been met with great success just yet. * Parallel codegen does not work on MSVC. Our current strategy is to take the N object files emitted by the N codegen threads and use `ld -r` to assemble them into *one* object file. The MSVC linker, however, does not have this ability, and this will need to be rearchitected to work on MSVC. I will fix parallel codegen in a future PR, and I'll also be watching LLVM closely to see if the aborts... disappear!
2015-07-06typo "struct has is 0-sized"Oliver Schneider-1/+1
2015-07-06doc: add some array usage examplesTshepang Lekhonkhobe-0/+13
2015-07-05std: small doc fixes for BufReader and BufWriterGeorg Brandl-8/+8
* fix probable copy-paste error in BufWriter.get_mut() * more consistent punctuation
2015-07-02Auto merge of #26682 - posix4e:netbsd, r=alexcrichtonbors-20/+141
This is dependent on https://github.com/rust-lang/rust-installer/pull/38. Once it is merged we most likely need to update the commit.
2015-07-02windows: Don't link rust_builtinAlex Crichton-6/+13
This library has no shims which are actually needed on Windows now, so translate that last easy one into Rust and then don't link it at all on Windows.
2015-07-02Auto merge of #26715 - steveklabnik:gh26497, r=huonwbors-0/+42
Add an example, plus some text that covers the buffering nature of channels. Fixes #26497
2015-07-01Add netbsd amd64 supportAlex Newman-20/+141
2015-07-01Auto merge of #26658 - alexcrichton:windows-net-no-inherit, r=aturonbors-16/+34
This was added after Windows 7 SP1, so it's not always available. Instead use the `SetHandleInformation` function to flag a socket as not inheritable. This is not atomic with respect to creating new processes, but it mirrors what Unix does with respect to possibly using the atomic option in the future. Closes #26543
2015-07-01msvc: Fix TLS destructorsAlex Crichton-2/+7
Just like the original article our Windows TLS support is based on predicted, this symbol must be linked in on MSVC to pull in the necessary support for TLS variables. This commit fixes a number of unit tests which require that TLS destructors are run.
2015-07-01Expand docs for recvSteve Klabnik-0/+42
Add an example, plus some text that covers the buffering nature of channels. Fixes #26497
2015-06-30std: Avoid the WSA_FLAG_NO_HANDLE_INHERIT optionAlex Crichton-16/+34
This was added after Windows 7 SP1, so it's not always available. Instead use the `SetHandleInformation` function to flag a socket as not inheritable. This is not atomic with respect to creating new processes, but it mirrors what Unix does with respect to possibly using the atomic option in the future. Closes #26543
2015-06-30Rollup merge of #26627 - tshepang:stdin-example, r=steveklabnikSteve Klabnik-0/+22
2015-06-30doc: add example for Stdin::read_lineTshepang Lekhonkhobe-0/+22
2015-06-28Add `.write(true)` to append and truncate examplesRemi Rampin-2/+2
Setting append without write doesn't give you a writeable file. Showing it as an example in the docs is confusing at best. Using truncate on a read-only file is an error on POSIX systems (note however that using create with read-only flags is fine).
2015-06-27std: Fix Windows XP compatibilityAlex Crichton-243/+353
This commit enables executables linked against the standard library to run on Windows XP. There are two main components of this commit: * APIs not available on XP are shimmed to have a fallback implementation and use runtime detection to determine if they are available. * Mutexes on Windows were reimplemented to use critical sections on XP where rwlocks are not available. The APIs which are not available on XP are: * SetFileInformationByHandle - this is just used by `File::truncate` and that function just returns an error now. * SetThreadStackGuarantee - this is used by the stack overflow support on windows, but if this isn't available then it's just ignored (it seems non-critical). * All condition variable APIs are missing - the shims added for these apis simply always panic for now. We may eventually provide a fallback implementation, but for now the standard library does not rely on condition variables for normal use. * RWLocks, like condition variables, are missing entirely. The same story for condition variables is taken here. These APIs are all now panicking stubs as the standard library doesn't rely on RWLocks for normal use. Currently, as an optimization, we use SRWLOCKs for the standard `sync::Mutex` implementation on Windows, which is indeed required for normal operation of the standard library. To allow the standard library to run on XP, this commit reimplements mutexes on Windows to use SRWLOCK instances *if available* and otherwise a CriticalSection is used (with some checking for recursive locking). With all these changes put together, a 32-bit MSVC-built executable can run on Windows XP and print "hello world" Closes #12842 Closes #19992 Closes #24776
2015-06-27std: Avoid missing fns on i686-pc-windows-msvcAlex Crichton-21/+74
It turns out that the 32-bit toolchain for MSVC has many of these functions as `static inline` functions in header files so there's not actually a symbol for Rust to call. All of the implementations just cast floats to their 64-bit variants and then cast back to 32-bit at the end, so the standard library now takes this strategy.
2015-06-27Rollup merge of #26596 - richo:richo-cleanup-macros, r=alexcrichtonManish Goregaokar-22/+0
2015-06-27Auto merge of #26569 - alexcrichton:msvc-llvm-update, r=brsonbors-9/+122
Now that LLVM has been updated, the only remaining roadblock to implementing unwinding for MSVC is to fill out the runtime support in `std::rt::unwind::seh`. This commit does precisely that, fixing up some other bits and pieces along the way: * The `seh` unwinding module now uses `RaiseException` to initiate a panic. * The `rust_try.ll` file was rewritten for MSVC (as it's quite different) and is located at `rust_try_msvc_64.ll`, only included on MSVC builds for now. * The personality function for all landing pads generated by LLVM is hard-wired to `__C_specific_handler` instead of the standard `rust_eh_personality` lang item. This is required to get LLVM to emit SEH unwinding information instead of DWARF unwinding information. This also means that on MSVC the `rust_eh_personality` function is entirely unused (but is defined as it's a lang item). More details about how panicking works on SEH can be found in the `rust_try_msvc_64.ll` or `seh.rs` files, but I'm always open to adding more comments! A key aspect of this PR is missing, however, which is that **unwinding is still turned off by default for MSVC**. There is a [bug in llvm][llvm-bug] which causes optimizations to inline enough landing pads that LLVM chokes. If the compiler is optimized at `-O1` (where inlining isn't enabled) then it can bootstrap with unwinding enabled, but when optimized at `-O2` (inlining is enabled) then it hits a fatal LLVM error. [llvm-bug]: https://llvm.org/bugs/show_bug.cgi?id=23884
2015-06-26std: clean up duplicated attrs and comment on panicRicho Healey-22/+0
2015-06-26Auto merge of #25646 - huonw:align, r=alexcrichtonbors-11/+11
This removes a footgun, since it is a reasonable assumption to make that pointers to `T` will be aligned to `align_of::<T>()`. This also matches the behaviour of C/C++. `min_align_of` is now deprecated. Closes #21611.
2015-06-25libstd/rand/os.rs: Remove a tiny bit of duplicated codeCruz Julian Bishop-3/+1
It's nearly midnight. I'm tired. I'll look for something worth doing in the morning :)
2015-06-25msvc: Implement runtime support for unwindingAlex Crichton-9/+122
Now that LLVM has been updated, the only remaining roadblock to implementing unwinding for MSVC is to fill out the runtime support in `std::rt::unwind::seh`. This commit does precisely that, fixing up some other bits and pieces along the way: * The `seh` unwinding module now uses `RaiseException` to initiate a panic. * The `rust_try.ll` file was rewritten for MSVC (as it's quite different) and is located at `rust_try_msvc_64.ll`, only included on MSVC builds for now. * The personality function for all landing pads generated by LLVM is hard-wired to `__C_specific_handler` instead of the standard `rust_eh_personality` lang item. This is required to get LLVM to emit SEH unwinding information instead of DWARF unwinding information. This also means that on MSVC the `rust_eh_personality` function is entirely unused (but is defined as it's a lang item). More details about how panicking works on SEH can be found in the `rust_try_msvc_64.ll` or `seh.rs` files, but I'm always open to adding more comments! A key aspect of this PR is missing, however, which is that **unwinding is still turned off by default for MSVC**. There is a [bug in llvm][llvm-bug] which causes optimizations to inline enough landing pads that LLVM chokes. If the compiler is optimized at `-O1` (where inlining isn't enabled) then it can bootstrap with unwinding enabled, but when optimized at `-O2` (inlining is enabled) then it hits a fatal LLVM error. [llvm-bug]: https://llvm.org/bugs/show_bug.cgi?id=23884
2015-06-24Make `align_of` behave like `min_align_of`.Huon Wilson-11/+11
This removes a footgun, since it is a reasonable assumption to make that pointers to `T` will be aligned to `align_of::<T>()`. This also matches the behaviour of C/C++. `min_align_of` is now deprecated. Closes #21611.
2015-06-24Fix capitalization in std docsBrian Anderson-1/+1
"Rust" and "The Rust Standard Library" are capitalized.
2015-06-24Auto merge of #26520 - oli-obk:three-tuple-transitive-traits, r=blussbors-0/+2
Tuples implement Debug and Hash if their components do. closes #24826 r? @alexcrichton cc @steveklabnik
2015-06-23Auto merge of #26219 - Veedrac:patch-1, r=alexcrichtonbors-0/+5
Fixes #26196. Alternatively we could explicitly check and complain (eg. panic), but I don't see the value-add.
2015-06-23tuple.rs: Document more traits implemented by tuples if their components doJosh Triplett-0/+2
Tuples implement Debug and Hash if their components do.
2015-06-23Auto merge of #26514 - tshepang:repetition, r=Gankrobors-1/+1
2015-06-23doc: remove repeated wordTshepang Lekhonkhobe-1/+1
2015-06-22Fix build on Android API levels below 21Geoffrey Thomas-0/+20
signal(), sigemptyset(), and sigaddset() are only available as inline functions until Android API 21. liblibc already handles signal() appropriately, so drop it from c.rs; translate sigemptyset() and sigaddset() (which is only used in a test) by hand from the C inlines. We probably want to revert this commit when we bump Android API level.