Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

std: Implement CString-related RFCs #22482

Merged
merged 1 commit into from Feb 19, 2015
Merged

Commits on Feb 18, 2015

  1. std: Implement CString-related RFCs

    This commit is an implementation of [RFC 592][r592] and [RFC 840][r840]. These
    two RFCs tweak the behavior of `CString` and add a new `CStr` unsized slice type
    to the module.
    
    [r592]: https://github.com/rust-lang/rfcs/blob/master/text/0592-c-str-deref.md
    [r840]: https://github.com/rust-lang/rfcs/blob/master/text/0840-no-panic-in-c-string.md
    
    The new `CStr` type is only constructable via two methods:
    
    1. By `deref`'ing from a `CString`
    2. Unsafely via `CStr::from_ptr`
    
    The purpose of `CStr` is to be an unsized type which is a thin pointer to a
    `libc::c_char` (currently it is a fat pointer slice due to implementation
    limitations). Strings from C can be safely represented with a `CStr` and an
    appropriate lifetime as well. Consumers of `&CString` should now consume `&CStr`
    instead to allow producers to pass in C-originating strings instead of just
    Rust-allocated strings.
    
    A new constructor was added to `CString`, `new`, which takes `T: IntoBytes`
    instead of separate `from_slice` and `from_vec` methods (both have been
    deprecated in favor of `new`). The `new` method returns a `Result` instead of
    panicking.  The error variant contains the relevant information about where the
    error happened and bytes (if present). Conversions are provided to the
    `io::Error` and `old_io::IoError` types via the `FromError` trait which
    translate to `InvalidInput`.
    
    This is a breaking change due to the modification of existing `#[unstable]` APIs
    and new deprecation, and more detailed information can be found in the two RFCs.
    Notable breakage includes:
    
    * All construction of `CString` now needs to use `new` and handle the outgoing
      `Result`.
    * Usage of `CString` as a byte slice now explicitly needs a `.as_bytes()` call.
    * The `as_slice*` methods have been removed in favor of just having the
      `as_bytes*` methods.
    
    Closes rust-lang#22469
    Closes rust-lang#22470
    [breaking-change]
    alexcrichton committed Feb 18, 2015
    Copy the full SHA
    1860ee5 View commit details
    Browse the repository at this point in the history