Commit Graph

7893 Commits

Author SHA1 Message Date
bors
f6341a878e Auto merge of #26159 - alexcrichton:tweak-process-lowering-raising, r=brson
* Slate these features to be stable in 1.2 instead of 1.1 (not being backported)
* Have the `FromRawFd` implementations follow the contract of the `FromRawFd`
  trait by taking ownership of the primitive specified.
* Refactor the implementations slightly to remove the `unreachable!` blocks as
  well as separating the stdio representation of `std::process` from
  `std::sys::process`.

cc #25494
2015-06-11 08:22:39 +00:00
Dave Huseby
4a2d4d3eb9 disabling socking timing tests because openbsd/bitrig get/set are not congruent due to rounding errors 2015-06-10 11:23:47 -07:00
bors
01ab4f761c Auto merge of #25777 - shepmaster:cstring-return-to-c, r=alexcrichton
As far as I was able to determine, it's currently *impossible* to allocate a C NUL-terminated string in Rust and then return it to C (transferring ownership), without leaking memory. There is support for passing the string to C (borrowing).

To complicate matters, it's not possible for the C code to just call `free` on the allocated string, due to the different allocators in use.

`CString` has no way to recreate itself from a pointer. This commit adds one. This is complicated a bit because Rust `Vec`s want the pointer, size, and capacity.

To deal with that, another method to shrink and "leak" the `CString` to a `char *` is also provided. 

We can then use `strlen` to determine the length of the string, which must match the capacity. 

**TODO**

- [x] Improve documentation
- [x] Add stability markers
- [x] Convert to `Box<[u8]>`

### Example code

With this example code:

```rust
#![feature(libc)]
#![feature(cstr_to_str)]
#![feature(c_str_memory)]

extern crate libc;

use std::ffi::{CStr,CString};

#[no_mangle]
pub extern fn reverse(s: *const libc::c_char) -> *const libc::c_char {
    let s = unsafe { CStr::from_ptr(s) };
    let s2 = s.to_str().unwrap();
    let s3: String = s2.chars().rev().collect();
    let s4 = CString::new(s3).unwrap();
    s4.into_ptr()
}

#[no_mangle]
pub extern fn cleanup(s: *const libc::c_char) {
    unsafe { CString::from_ptr(s) };
}
```

Compiled using `rustc --crate-type dylib str.rs`, I was able to link against it from C (`gcc -L. -l str str.c -o str`):
 
```c
#include <stdio.h>

extern char *reverse(char *);
extern void cleanup(char *);

int main() {
  char *s = reverse("Hello, world!");
  printf("%s\n", s);
  cleanup(s);
}
```

As well as dynamically link via Ruby:

```ruby
require 'fiddle'
require 'fiddle/import'

module LibSum
  extend Fiddle::Importer

  dlload './libstr.dylib'
  extern 'char* reverse(char *)'
  extern 'void cleanup(char *)'
end

s = LibSum.reverse("hello, world!")
puts s
LibSum.cleanup(s)
```
2015-06-10 22:37:38 +00:00
Manish Goregaokar
7d9427e6cd Rollup merge of #26146 - steveklabnik:remove_unsafe_pointer, r=Gankro
Using two terms for one thing is confusing, these are called 'raw pointers' today.
2015-06-10 22:07:10 +05:30
Alex Crichton
56a5ff284a std: Tweak process raising/lowering implementations
* Slate these features to be stable in 1.2 instead of 1.1 (not being backported)
* Have the `FromRawFd` implementations follow the contract of the `FromRawFd`
  trait by taking ownership of the primitive specified.
* Refactor the implementations slightly to remove the `unreachable!` blocks as
  well as separating the stdio representation of `std::process` from
  `std::sys::process`.
2015-06-09 17:48:10 -07:00
Steve Klabnik
2c75256c15 Exise 'unsafe pointer' in favor of 'raw pointer'
Using two terms for one thing is confusing, these are called 'raw pointers' today.
2015-06-09 16:49:24 -04:00
Andrew Straw
24c596c650 fix example in comments about demangling 2015-06-09 20:47:51 +02:00
bors
7b0f2af27f Auto merge of #26102 - retep998:openoptionsext, r=alexcrichton
r? @alexcrichton
2015-06-09 10:55:04 +00:00
bors
02c33b690b Auto merge of #26077 - SimonSapin:patch-6, r=alexcrichton
With the latter is provided by the `From` conversion trait, the former is now completely redundant. Their code is identical. Let’s deprecate now and plan to remove in the next cycle. (It’s `#[unstable]`.)

r? @alexcrichton 
CC @nagisa
2015-06-08 20:52:33 +00:00
Peter Atashian
b0d535b2ba OpenOptionsExt on Windows: i32 -> u32
Since all those flags are u32 anyway, avoid unnecessary conversions
[breaking change]

Signed-off-by: Peter Atashian <retep998@gmail.com>
2015-06-08 14:04:22 -04:00
Simon Sapin
c160192f5f Replace usage of String::from_str with String:from 2015-06-08 16:55:35 +02:00
bors
bea1c4a78e Auto merge of #25823 - oli-obk:static_to_const_lint, r=alexcrichton
r? @eddyb
2015-06-08 04:54:59 +00:00
Oliver 'ker' Schneider
ec078a033b change some statics to constants 2015-06-07 19:50:13 +02:00
Jake Goulding
e20a6dbeed Add methods for handing CStrings back and forth to C 2015-06-05 22:27:09 -04:00
Jake Goulding
97294be30c Convert CString to a Box<[u8]> 2015-06-05 22:27:09 -04:00
Martin Pool
17d76b350b Another small grammar fix for process.rs 2015-06-05 17:32:34 -07:00
Martin Pool
cd90854899 Doc fix for process.rs
File handles are inherited from, not by, the parent process
2015-06-05 17:27:04 -07:00
Steve Klabnik
0571726d90 Rollup merge of #26001 - sae-bom:master, r=alexcrichton
fixed build fail on aarch64-android
by support aarch64-android raw type definitions
2015-06-05 11:20:28 +02:00
Sae-bom Kim
62f66a68da support aarch64-android raw type definitions 2015-06-04 14:25:05 +09:00
Manish Goregaokar
8b57130e84 Rollup merge of #25990 - carols10cents:try-docs, r=nikomatsakis
The API documentation is not explicit enough that because `try!` returns
`Err` early for you, you can only use it in functions that return
`Result`. The book mentions this, but if you come across `try!` outside
of the book and look it up in the docs, this restriction on the return
type of the function is not particularly clear.

I seriously had this epiphany a few days ago after working with Rust for MONTHS, and after seeing [a friend have to come to the same realization](http://joelmccracken.github.io/entries/a-simple-web-app-in-rust-pt-2a/), I'd like to save more people from this confusion :) 💖
2015-06-04 10:07:02 +05:30
Manish Goregaokar
5421b1fa25 Rollup merge of #25988 - webmobster:master, r=alexcrichton
The priority policy of RWLock is not specified, and the fact there is no policy should probably be specified.
2015-06-04 10:07:02 +05:30
webmobster
24808fa076 Add priority policy to RWLock API Documentation 2015-06-03 18:55:52 +01:00
Carol Nichols
c692d75b5a Indent 4 spaces instead of 2 2015-06-03 13:23:55 -04:00
Carol Nichols
80322e2e97 Return Ok(()) instead of Ok() 2015-06-03 13:23:40 -04:00
Carol Nichols
a41fd590a8 Use write_all instead of write_line 2015-06-03 13:23:20 -04:00
Carol Nichols
d328d6472e Add prelude to get Write 2015-06-03 13:15:50 -04:00
Carol Nichols
9634bcbd3d Improve try! docs to make clearer it returns Result.
The API documentation is not explicit enough that because `try!` returns
`Err` early for you, you can only use it in functions that return
`Result`. The book mentions this, but if you come across `try!` outside
of the book and look it up in the docs, this restriction on the return
type of the function is not particularly clear.
2015-06-03 10:12:16 -04:00
Manish Goregaokar
e490c17eb5 Rollup merge of #25974 - richo:stack-msg, r=alexcrichton
These are implemented in asm, they're just not inlined.

Open questions are:
* Should I just inline them? They're.. big, but it seems as though this needs violates the #[inline(always)] gaurantees the others make.
* Does something (llvm?) provide these as intrinsics? The structure of this code suggests that we could be hoisting off something else, instead of flagrantly ignoring it like we do for power and mips.
2015-06-03 14:46:41 +05:30
Richo Healey
506d5a8d19 std: clarify comments about sp* implementations 2015-06-02 16:55:50 -07:00
Manish Goregaokar
6e97b16d02 Rollup merge of #25951 - mbrubeck:nan, r=alexcrichton
This is based on the documented behavior of cmath::{fmin,fmax}.  It is also tested by existing unit tests in this module.
2015-06-02 11:14:09 +05:30
bors
613e57b448 Auto merge of #25246 - mzabaluev:io-invalid-data, r=alexcrichton
This takes the cases from `InvalidInput` where a data format error
was encountered. This is different from the documented semantics
of `InvalidInput`, which more likely indicate a programming error.

Fixes rust-lang/rfcs#906
2015-06-01 23:12:52 +00:00
Matt Brubeck
f44d287a76 Document behavior of {f32,f64}::{min,max} on NaN
This is based on the documented behavior of cmath::{fmin,fmax}.  It is also
tested by existing unit tests in this module.
2015-06-01 15:02:11 -07:00
bors
a49ae5bd43 Auto merge of #25858 - alexcrichton:disable-os-tls, r=brson
This commit adds a ./configure option called `--disable-elf-tls` which disables
ELF based TLS (that which is communicated to LLVM) on platforms which already
support it. OSX 10.6 does not support this form of TLS, and some users of Rust
need to target 10.6 and are unable to do so due to the usage of TLS. The
standard library will continue to use ELF based TLS on OSX by default (as the
officially supported platform is 10.7+), but this adds an option to compile the
standard library in a way that is compatible with 10.6.

Closes #25342
2015-06-01 19:51:57 +00:00
Eduard Burtescu
4a4315bf4b Inline hash_table::calculate_offsets, used by iterators.
The `HashMap` and `HashSet` iterators use `RawTable::first_bucket_raw` which is generic and will get inlined cross-crate.
However, `first_bucket_raw` calls `calculate_offsets` and the call doesn't get inlined, despite being a simple function.
This missing `#[inline]` results in `hash_table::calculate_offsets` showing up at the top of a callgrind profile with 3 million calls (for the testcase in #25916).
2015-05-31 11:03:46 +03:00
Mikhail Zabaluev
0ad019f4e8 std::io: bump the stability tag on ErrorKind::InvalidData to 1.2.0 2015-05-30 15:09:13 +03:00
bors
474c6e0ae4 Auto merge of #25818 - sfackler:socket-timeouts, r=alexcrichton
Closes #25619 

r? @alexcrichton
2015-05-30 04:20:20 +00:00
Steven Fackler
b5c6c7ed40 Loosen timeout restrictions 2015-05-29 19:09:29 -07:00
bors
996fb8d001 Auto merge of #25494 - alexcrichton:stdio-from-raw, r=aturon
This commit implements a number of standard traits for the standard library's
process I/O handles. The `FromRaw{Fd,Handle}` traits are now implemented for the
`Stdio` type and the `AsRaw{Fd,Handle}` traits are now implemented for the
`Child{Stdout,Stdin,Stderr}` types.

The stability markers for these implementations mention that they are stable for
1.1 as I will nominate this commit for cherry-picking to beta.
2015-05-29 19:24:40 +00:00
Mikhail Zabaluev
1d67cef6d2 std::io: New ErrorKind value InvalidData
This takes the cases from InvalidInput where a data format error
was encountered. This is different from the documented semantics
of InvalidInput, which more likely indicate a programming error.
2015-05-29 22:23:46 +03:00
Steven Fackler
39abcef0a7 Skip timeout upper bound check on windows 2015-05-29 08:32:22 -07:00
Steven Fackler
69a0e1af95 Implement RFC 1047 - socket timeouts
Closes #25619
2015-05-28 20:03:20 -07:00
bors
99c2f779d2 Auto merge of #25816 - sfackler:io-error-delegation, r=alexcrichton
The first commit simply forwards `io::Error`'s `cause` implementation to the inner error.

The second commit adds accessor methods for the inner error. Method names mirror those used elsewhere like `BufReader`.

r? @alexcrichton
2015-05-29 01:09:48 +00:00
Steven Fackler
aebf331431 Mention UFCS sadness in instability messages 2015-05-28 10:34:40 -07:00
Alex Crichton
1b5f9cb1f1 std: Add an option to disable ELF based TLS
This commit adds a ./configure option called `--disable-elf-tls` which disables
ELF based TLS (that which is communicated to LLVM) on platforms which already
support it. OSX 10.6 does not support this form of TLS, and some users of Rust
need to target 10.6 and are unable to do so due to the usage of TLS. The
standard library will continue to use ELF based TLS on OSX by default (as the
officially supported platform is 10.7+), but this adds an option to compile the
standard library in a way that is compatible with 10.6.
2015-05-28 10:14:42 -07:00
Steve Klabnik
16a47c2d91 remove references to IoResult
This is now std::io::Result
2015-05-28 12:51:01 -04:00
bors
4f66d881a5 Auto merge of #25843 - shepmaster:remove-public-int-and-uint, r=huonw 2015-05-28 09:20:49 +00:00
Steven Fackler
f65ba38cc4 Add a test for downcasting
Ergonomics are a bit crappy right now because method resolution isn't
smart enough to drop bounds, unfortunately.
2015-05-27 23:03:04 -07:00
Steven Fackler
b529a7837b Add accessors for io::Error's inner error.
error::Error itself has downcasting methods, so there's no need to
duplicate those here.
2015-05-27 21:53:54 -07:00
Steven Fackler
4458b5a9d5 Delegate io::Error::cause to inner error 2015-05-27 21:53:54 -07:00
Jake Goulding
875d356245 Remove mentions of int / uint from the isize / usize docs 2015-05-27 19:16:00 -04:00