Commit Graph

8248 Commits

Author SHA1 Message Date
bors 3a80411415 Auto merge of #28038 - durka:grep-unstable-issue-refs, r=alexcrichton
After submitting #28031, I ran a [script](https://gist.github.com/durka/a5243440697c780f669b) on the rest of src/ and found some anomalies. In this PR are the fixes that I thought were obvious (but I might be wrong!). The others I've submitted in issue #28037.
2015-08-28 02:49:45 +00:00
bors 8dba06aeee Auto merge of #28052 - Manishearth:rollup, r=Manishearth
- Successful merges: #28010, #28013, #28022, #28029, #28033, #28039, #28045, #28048
- Failed merges:
2015-08-27 23:25:38 +00:00
Manish Goregaokar aebe352794 Rollup merge of #28029 - tshepang:unusual, r=steveklabnik 2015-08-28 03:38:37 +05:30
bors 79dd92fc16 Auto merge of #27930 - barosl:path_max, r=alexcrichton
This PR rewrites the code that previously relied on `PATH_MAX`.

On my tests, even though the user gives the buffer length explicitly, both Linux's glibc and OS X's libc seems to obey the hard limit of `PATH_MAX` internally. So, to truly remove the limitation of `PATH_MAX`, the related system calls should be rewritten from scratch in Rust, which this PR does not try to do.

However, eliminating the need of `PATH_MAX` is still a good idea for various reasons, such as: (1) they might change the implementation in the future, and (2) some platforms don't have a hard-coded `PATH_MAX`, such as GNU Hurd.

More details are in the commit messages.

Fixes #27454.

r? @alexcrichton
2015-08-27 21:47:33 +00:00
Barosl Lee 6065678e62 Use a different buffer doubling logic for std::sys::os::getcwd
Make `std::sys::os::getcwd` call `Vec::reserve(1)` followed by
`Vec::set_len` to double the buffer. This is to align with other similar
functions, such as:

- `std::sys_common::io::read_to_end_uninitialized`
- `std::sys::fs::readlink`

Also, reduce the initial buffer size from 2048 to 512. The previous size was
introduced with 4bc26ce in 2013, but it seems a bit excessive. This is
probably because buffer doubling was not implemented back then.
2015-08-28 04:48:03 +09:00
Barosl Lee 7723550fdd Reduce the reliance on PATH_MAX
- Rewrite `std::sys::fs::readlink` not to rely on `PATH_MAX`

It currently has the following problems:

1. It uses `_PC_NAME_MAX` to query the maximum length of a file path in
the underlying system. However, the meaning of the constant is the
maximum length of *a path component*, not a full path. The correct
constant should be `_PC_PATH_MAX`.

2. `pathconf` *may* fail if the referred file does not exist. This can
be problematic if the file which the symbolic link points to does not
exist, but the link itself does exist. In this case, the current
implementation resorts to the hard-coded value of `1024`, which is not
ideal.

3. There may exist a platform where there is no limit on file path
lengths in general. That's the reaon why GNU Hurd doesn't define
`PATH_MAX` at all, in addition to having `pathconf` always returning
`-1`. In these platforms, the content of the symbolic link can be
silently truncated if the length exceeds the hard-coded limit mentioned
above.

4. The value obtained by `pathconf` may be outdated at the point of
actually calling `readlink`. This is inherently racy.

This commit introduces a loop that gradually increases the length of the
buffer passed to `readlink`, eliminating the need of `pathconf`.

- Remove the arbitrary memory limit of `std::sys::fs::realpath`

As per POSIX 2013, `realpath` will return a malloc'ed buffer if the
second argument is a null pointer.[1]

[1] http://pubs.opengroup.org/onlinepubs/9699919799/functions/realpath.html

- Comment on functions that are still using `PATH_MAX`

There are some functions that only work in terms of `PATH_MAX`, such as
`F_GETPATH` in OS X. Comments on them for posterity.
2015-08-28 04:46:55 +09:00
bors b28f0b1887 Auto merge of #28030 - tshepang:improve-example, r=alexcrichton 2015-08-27 16:51:57 +00:00
Alex Burka 595fda0de7 fix some more unstable issue annotations 2015-08-27 12:48:35 -04:00
bors d6a65cd3fe Auto merge of #27975 - sfackler:iter-order-methods, r=aturon
This does cause some breakage due to deficiencies in resolve -
`path::Components` is both an `Iterator` and implements `Eq`, `Ord`,
etc. If one calls e.g. `partial_cmp` on a `Components` and passes a
`&Components` intending to target the `PartialOrd` impl, the compiler
will select the `partial_cmp` from `Iterator` and then error out. I
doubt anyone will run into breakage from `Components` specifically, but
we should see if there are third party types that will run into issues.

`iter::order::equals` wasn't moved to `Iterator` since it's exactly the
same as `iter::order::eq` but with an `Eq` instead of `PartialEq` bound,
which doensn't seem very useful.

I also updated `le`, `gt`, etc to use `partial_cmp` which lets us drop
the extra `PartialEq` bound.

cc #27737 

r? @alexcrichton
2015-08-27 07:13:02 +00:00
Steven Fackler 651c42f11f Make iter::order functions into methods on Iterator
This does cause some breakage due to deficiencies in resolve -
`path::Components` is both an `Iterator` and implements `Eq`, `Ord`,
etc. If one calls e.g. `partial_cmp` on a `Components` and passes a
`&Components` intending to target the `PartialOrd` impl, the compiler
will select the `partial_cmp` from `Iterator` and then error out. I
doubt anyone will run into breakage from `Components` specifically, but
we should see if there are third party types that will run into issues.

`iter::order::equals` wasn't moved to `Iterator` since it's exactly the
same as `iter::order::eq` but with an `Eq` instead of `PartialEq` bound,
which doensn't seem very useful.

I also updated `le`, `gt`, etc to use `partial_cmp` which lets us drop
the extra `PartialEq` bound.

cc #27737
2015-08-26 23:23:57 -07:00
bors fd302a95e1 Auto merge of #27808 - SimonSapin:utf16decoder, r=alexcrichton
* Rename `Utf16Items` to `Utf16Decoder`. "Items" is meaningless.
* Generalize it to any `u16` iterator, not just `[u16].iter()`
* Make it yield `Result` instead of a custom `Utf16Item` enum that was isomorphic to `Result`. This enable using the `FromIterator for Result` impl.
* Replace `Utf16Item::to_char_lossy` with a `Utf16Decoder::lossy` iterator adaptor.

This is a [breaking change], but only for users of the unstable `rustc_unicode` crate.

I’d like this functionality to be stabilized and re-exported in `std` eventually, as the "low-level equivalent" of `String::from_utf16` and `String::from_utf16_lossy` like #27784 is the low-level equivalent of #27714.

CC @aturon, @alexcrichton
2015-08-27 00:41:13 +00:00
Tshepang Lekhonkhobe cf3d6b569c doc: improve as_path example 2015-08-26 23:40:36 +02:00
Tshepang Lekhonkhobe 933eb3e320 path: the if-else block looked unusual 2015-08-26 23:16:53 +02:00
bors 685332c8d3 Auto merge of #27998 - birkenfeld:patch-1, r=alexcrichton
These have been removed and should not be documented here.

Should the replacement crates on crates.io be linked to, or is that not wanted in the core docs?
2015-08-26 15:50:52 +00:00
bors b339f38fa2 Auto merge of #27995 - nagisa:windows-error-message, r=alexcrichton
According to https://msdn.microsoft.com/en-us/library/windows/desktop/ms679351(v=vs.85).aspx:

> If the function succeeds, the return value is the number of TCHARs stored in the output buffer,
> excluding the terminating null character.

_**Completely untested**_… since I have no Windows machine or anything of a sort to test this on.

r? @aturon
2015-08-25 16:22:17 +00:00
Georg Brandl fc7c0f99d7 collections doc: remove mention of BitVec, BitSet, VecMap
These have been removed and should not be documented here.
2015-08-25 18:20:42 +02:00
Simonas Kazlauskas c4c533a293 Do not recalculate string length in error_string
According to https://msdn.microsoft.com/en-us/library/windows/desktop/ms679351(v=vs.85).aspx:

> If the function succeeds, the return value is the number of TCHARs stored in the output buffer,
> excluding the terminating null character.
2015-08-25 18:33:39 +03:00
bors e195aa84b4 Auto merge of #27971 - tbu-:pr_cloexec, r=alexcrichton
On Linux the flag is just ignored if it is not supported:
https://lwn.net/Articles/588444/

Still needs the values of O_CLOEXEC on the BSDs.

Touches #24237.
2015-08-25 07:23:18 +00:00
bors 656c3acdeb Auto merge of #27966 - GuillaumeGomez:iterator, r=alexcrichton
Part of #22709.
cc @Veedrac

r? @bluss

I don't have added tests yet, I'll see how to do it tomorrow.
2015-08-25 04:48:19 +00:00
bors 19aadd51a8 Auto merge of #27957 - overminder:aug23-i686-android, r=alexcrichton
- All the libstd tests are passing in the optimized build against
  a Zenfone2 and the x86 Android emulator.

I haven't tested the other libraries though.
2015-08-25 03:04:30 +00:00
Tobias Bucher 6de7f609dd Atomically open files with O_CLOEXEC where possible
On Linux the flag is just ignored if it is not supported:
https://lwn.net/Articles/588444/

Touches #24237.
2015-08-24 20:02:09 +02:00
Steven Fackler f266f12f30 Add stability markers for new impls 2015-08-24 08:59:45 -07:00
Steven Fackler b61fddebb0 Implement Error for AddrParseError
Closes #27973
2015-08-23 23:00:18 -07:00
Guillaume Gomez 8529d75b81 Add Send/Sync traits on LookupHost struct 2015-08-23 22:27:33 +02:00
bors c69c29bb53 Auto merge of #27948 - wthrowe:f64-sqrt, r=alexcrichton
This fixes a reappearance of bug #9987 introduced in
1ddee8070d, which caused
f64::tests::test_sqrt_domain to fail (at least on some systems).
2015-08-23 15:41:34 +00:00
Tim JIANG a1b2deb33b New cross target: i686-linux-android
- All the libstd tests are now passing in the optimized build against
  a Zenfone2 and the x86 Android simulator.
2015-08-23 15:38:11 +08:00
bors 054b7b766c Auto merge of #27912 - DiamondLovesYou:backtrace-refactor, r=alexcrichton 2015-08-23 02:41:01 +00:00
William Throwe 5e9008dfb7 Fix undefined behavior in f64::sqrt
This fixes a reappearance of bug #9987 introduced in
1ddee8070d, which caused
f64::tests::test_sqrt_domain to fail (at least on some systems).
2015-08-22 20:08:53 -04:00
Simon Sapin 6174b8d726 Refactor low-level UTF-16 decoding.
* Rename `utf16_items` to `decode_utf16`. "Items" is meaningless.
* Move it to `rustc_unicode::char`, exposed in `std::char`.
* Generalize it to any `u16` iterable, not just `&[u16]`.
* Make it yield `Result` instead of a custom `Utf16Item` enum that was isomorphic to `Result`. This enable using the `FromIterator for Result` impl.
* Add a `REPLACEMENT_CHARACTER` constant.
* Document how `result.unwrap_or(REPLACEMENT_CHARACTER)` replaces `Utf16Item::to_char_lossy`.
2015-08-23 00:28:56 +02:00
Richard Diamond deff8781f1 Fix the Mac build, again. 2015-08-22 16:50:18 -05:00
bors 8278342a87 Auto merge of #27896 - alexcrichton:into-raw-os-prelude, r=brson
These traits were mistakenly left out of the OS-specific prelude modules when
they were added.
2015-08-22 19:38:25 +00:00
Richard Diamond 6cbef957f6 Add missing imports to dladdr.rs for Mac. 2015-08-22 11:52:31 -05:00
bors 94ee3b5a54 Auto merge of #27871 - alexcrichton:stabilize-libcore, r=aturon
These commits move libcore into a state so that it's ready for stabilization, performing some minor cleanup:

* The primitive modules for integers in the standard library were all removed from the source tree as they were just straight reexports of the libcore variants.
* The `core::atomic` module now lives in `core::sync::atomic`. The `core::sync` module is otherwise empty, but ripe for expansion!
* The `core::prelude::v1` module was stabilized after auditing that it is a subset of the standard library's prelude plus some primitive extension traits (char, str, and slice)
* Some unstable-hacks for float parsing errors were shifted around to not use the same unstable hacks (e.g. the `flt2dec` module is now used for "privacy").


After this commit, the remaining large unstable functionality specific to libcore is:

* `raw`, `intrinsics`, `nonzero`, `array`, `panicking`, `simd` -- these modules are all unstable or not reexported in the standard library, so they're just remaining in the same status quo as before
* `num::Float` - this extension trait for floats needs to be audited for functionality (much of that is happening in #27823)  and may also want to be renamed to `FloatExt` or `F32Ext`/`F64Ext`.
* Should the extension traits for primitives be stabilized in libcore?

I believe other unstable pieces are not isolated to just libcore but also affect the standard library.

cc #27701
2015-08-22 09:59:07 +00:00
bors e9b74a9017 Auto merge of #27860 - m4rw3r:rustdoc_unstable_feature_issue, r=alexcrichton
Implemented #27759 

Example:

![screen shot 2015-08-16 at 21 45 17](https://cloud.githubusercontent.com/assets/108100/9295040/1fb24d50-4460-11e5-8ab8-81ac5330974a.png)
2015-08-22 08:16:53 +00:00
bors 983d2b3d1a Auto merge of #27826 - sfackler:wait-timeout-enum, r=alexcrichton
Returning a primitive bool results in a somewhat confusing API - does
`true` indicate success - i.e. no timeout, or that a timeout has
occurred? An explicitly named enum makes it clearer.

[breaking-change]

r? @alexcrichton
2015-08-22 06:30:53 +00:00
Richard Diamond 7925c7972e Refactor unix backtracing. NFC. 2015-08-20 15:20:55 -05:00
Steven Fackler 12216b7209 Add issue numbers 2015-08-19 17:01:19 -07:00
Steven Fackler b1c7a46c0d Turn TimedOut into a BarrierWaitResult style opaque type 2015-08-19 17:00:15 -07:00
Steven Fackler 46156de5f1 Add TimedOut::timed_out 2015-08-19 17:00:15 -07:00
Steven Fackler 42a386fcf8 Make Condvar::wait_timeout return an enum instead of a bool
Returning a primitive bool results in a somewhat confusing API - does
`true` indicate success - i.e. no timeout, or that a timeout has
occurred? An explicitly named enum makes it clearer.

[breaking-change]
2015-08-19 17:00:15 -07:00
bors 3a407b6c4e Auto merge of #27885 - steveklabnik:gh27637, r=alexcrichton
Hopefully make this distinction a little more clear.

Fixes #27637 
r? @alexcrichton /cc @havvy
2015-08-19 17:29:43 +00:00
Steve Klabnik 7c06c5a900 Improve std::io::ErrorKind
Hopefully make this distinction a little more clear.

Fixes #27637
2015-08-19 10:22:18 -04:00
Alex Crichton 708200c36a std: Add into_raw_os traits to the OS preludes
These traits were mistakenly left out of the OS-specific prelude modules when
they were added.
2015-08-18 17:23:45 -07:00
bors 2fb3fb24a3 Auto merge of #27836 - alexcrichton:rename-cstring-raw, r=bluss
This commit renames the `CString::{into_ptr, from_ptr}` methods to `into_raw`
and `from_raw` to mirror the corresponding methods on `Box` and the naming of
"raw" for `from_raw_parts` on slices and vectors.

cc #27769
2015-08-18 21:47:06 +00:00
Alex Crichton 3cf9e1086e std: Rename cstr_memory feature to use "raw"
This commit renames the `CString::{into_ptr, from_ptr}` methods to `into_raw`
and `from_raw` to mirror the corresponding methods on `Box` and the naming of
"raw" for `from_raw_parts` on slices and vectors.

cc #27769
2015-08-18 09:10:50 -07:00
Remi Rampin f70faa91eb Remove repetition in Seek::seek() doc 2015-08-18 10:01:41 -04:00
bors 4c0ffc0e38 Auto merge of #27823 - eefriedman:float-dep-core, r=alexcrichton
There wasn't any particular reason the functions needed to be there
anyway, so just get rid of them, and adjust libstd to compensate.

With this change, libcore depends on exactly two floating-point functions:
fmod and fmodf.  They are implicitly referenced because they are used to
implement "%".

Dependencies of libcore on Linux x86-x64 with this patch:
```
0000000000000000         *UND*	0000000000000000 __powidf2
0000000000000000         *UND*	0000000000000000 __powisf2
0000000000000000         *UND*	0000000000000000 fmod
0000000000000000         *UND*	0000000000000000 fmodf
0000000000000000         *UND*	0000000000000000 memcmp
0000000000000000         *UND*	0000000000000000 memcpy
0000000000000000         *UND*	0000000000000000 memset
0000000000000000         *UND*	0000000000000000 rust_begin_unwind
0000000000000000         *UND*	0000000000000000 rust_eh_personality
```
2015-08-18 04:23:25 +00:00
Huon Wilson c66554cab3 switch core::simd to repr(simd) and deprecate it.
This functionality will be available out of tree in the `simd` crate on
crates.io.

[breaking-change]
2015-08-17 14:41:37 -07:00
Alex Crichton 0c849de1a2 core: Move atomic into a new sync module
This mirrors the same hierarchy in the standard library.
2015-08-17 14:03:32 -07:00
Alex Crichton 8cb4d8671a std: Clean up primitive integer modules
All of the modules in the standard library were just straight reexports of those
in libcore, so remove all the "macro modules" from the standard library and just
reexport what's in core directly.
2015-08-17 14:03:32 -07:00