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

Rollup of 38 pull requests #40432

Merged
merged 46 commits into from
Mar 11, 2017
Merged
Changes from 2 commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
8a64cf7
Fix suggestion span error with a line containing non-ASCIIs
sinkuu Feb 25, 2017
edf5dc6
Box docs: no allocation is done for ZSTs.
Mar 9, 2017
4eeede3
fix emscripten test detection
TimNN Mar 4, 2017
da6e7c8
Distinguish the ways `CStr::from_bytes_with_nul` can fail
tbu- Mar 9, 2017
57c989c
Fix botched member variable rename
shepmaster Mar 4, 2017
3e2390f
Restore creating the channel-rust-$channel-date.txt files
shepmaster Mar 3, 2017
58ff4f6
rustbuild: expose LLVM_PARALLEL_LINK_JOBS
Mar 5, 2017
8062cfb
Implement placement-in protocol for and `VecDeque`
Mar 9, 2017
4078b25
Clean up rustdoc css
GuillaumeGomez Mar 9, 2017
a8cacd3
travis: Attempt to debug sccache failures
alexcrichton Mar 7, 2017
ac2bc7c
Point to enclosing block/fn on nested unsafe
estebank Jan 20, 2017
a07c9a2
Export attributes in save-analysis data
jonasbb Feb 14, 2017
203d227
Store attributes as strings
jonasbb Feb 23, 2017
db35604
Move remove_docs_from_attrs into lowering step
jonasbb Mar 2, 2017
4ca9c97
Remove ability for plugins to register a MIR pass
nagisa Mar 3, 2017
0a55c8e
Support armhf abi on 64-bit ARM cpus
infinity0 Mar 6, 2017
7b0dd7b
Fix incorrect span label formatting
estebank Mar 6, 2017
5afe784
Expect macro defs in save-analysis and add expn info to spans for att…
nrc Mar 7, 2017
5c8aa74
rustc: Exit quickly on only `--emit dep-info`
alexcrichton Mar 7, 2017
9a84611
travis: Fuchsia builder
petrhosek Feb 17, 2017
83814fd
OsString::shrink_to_fit.
Mar 10, 2017
384ee48
Clarify docs in `VecDeque::resize`
DirkyJerky Mar 10, 2017
dcfc7ee
travis: Remove compiling OpenSSL through homebrew
alexcrichton Mar 10, 2017
c65996e
Don't put Cargo into the rustc workspace
alexcrichton Mar 6, 2017
d335c0a
Rollup merge of #39202 - estebank:nested-unsafe, r=jonathandturner
alexcrichton Mar 10, 2017
3b7a534
Rollup merge of #39820 - jonasbb:export-attributes, r=nrc
alexcrichton Mar 10, 2017
b92073d
Rollup merge of #39918 - petrhosek:fuchsia-ci, r=alexcrichton
alexcrichton Mar 10, 2017
da994cd
Rollup merge of #40092 - sinkuu:fix_suggestion_index, r=pnkfelix
alexcrichton Mar 10, 2017
37265d8
Rollup merge of #40225 - shepmaster:restore-build-date-file, r=alexcr…
alexcrichton Mar 10, 2017
5377eab
Rollup merge of #40239 - nagisa:death-to-plugins, r=nikomatsakis
alexcrichton Mar 10, 2017
5c715de
Rollup merge of #40259 - TimNN:fix-emscripten-tests, r=alexcrichton
alexcrichton Mar 10, 2017
0ce745b
Rollup merge of #40261 - infinity0:patch-1, r=alexcrichton
alexcrichton Mar 10, 2017
416889f
Rollup merge of #40277 - rkruppe:llvm-parallel-link-jobs, r=alexcrichton
alexcrichton Mar 10, 2017
dcc24b1
Rollup merge of #40278 - GuillaumeGomez:css-cleanup, r=frewsxcv
alexcrichton Mar 10, 2017
c253eb2
Rollup merge of #40287 - estebank:label-overlap, r=nrc
alexcrichton Mar 10, 2017
ac1bbf7
Rollup merge of #40297 - alexcrichton:fix-submodules, r=brson
alexcrichton Mar 10, 2017
755877d
Rollup merge of #40311 - nrc:save-proc-macro-attr, r=jseyfried
alexcrichton Mar 10, 2017
c1c3b09
Rollup merge of #40324 - alexcrichton:sccache-errors, r=aturon
alexcrichton Mar 10, 2017
2b1d1bb
Rollup merge of #40336 - alexcrichton:fast-dep-info, r=nrc
alexcrichton Mar 10, 2017
8f02dc2
Rollup merge of #40379 - clarcharr:box_docs, r=brson
alexcrichton Mar 10, 2017
d0da85d
Rollup merge of #40386 - tbu-:pr_display_frombyteswithnulerror, r=ale…
alexcrichton Mar 10, 2017
dcf4182
Rollup merge of #40389 - F001:placementVecDeque, r=nagisa
alexcrichton Mar 10, 2017
f4b4e09
Rollup merge of #40410 - clarcharr:os_string_shrink_to_fit, r=alexcri…
alexcrichton Mar 10, 2017
b32393c
Rollup merge of #40423 - DirkyJerky:patch-2, r=BurntSushi
alexcrichton Mar 10, 2017
d03b6b3
Rollup merge of #40424 - alexcrichton:faster-travis-osx, r=brson
alexcrichton Mar 10, 2017
3493d91
Test fixes and rebase conflicts
alexcrichton Mar 11, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 40 additions & 6 deletions src/libstd/ffi/c_str.rs
Original file line number Diff line number Diff line change
@@ -154,7 +154,28 @@ pub struct NulError(usize, Vec<u8>);
/// byte was found too early in the slice provided or one wasn't found at all.
#[derive(Clone, PartialEq, Eq, Debug)]
#[stable(feature = "cstr_from_bytes", since = "1.10.0")]
pub struct FromBytesWithNulError { _a: () }
pub struct FromBytesWithNulError {
kind: FromBytesWithNulErrorKind,
}

#[derive(Clone, PartialEq, Eq, Debug)]
enum FromBytesWithNulErrorKind {
InteriorNul(usize),
NotNulTerminated,
}

impl FromBytesWithNulError {
fn interior_nul(pos: usize) -> FromBytesWithNulError {
FromBytesWithNulError {
kind: FromBytesWithNulErrorKind::InteriorNul(pos),
}
}
fn not_nul_terminated() -> FromBytesWithNulError {
FromBytesWithNulError {
kind: FromBytesWithNulErrorKind::NotNulTerminated,
}
}
}

/// An error returned from `CString::into_string` to indicate that a UTF-8 error
/// was encountered during the conversion.
@@ -458,14 +479,23 @@ impl From<NulError> for io::Error {
#[stable(feature = "frombyteswithnulerror_impls", since = "1.17.0")]
impl Error for FromBytesWithNulError {
fn description(&self) -> &str {
"data provided is not null terminated or contains an interior nul byte"
match self.kind {
FromBytesWithNulErrorKind::InteriorNul(..) =>
"data provided contains an interior nul byte",
FromBytesWithNulErrorKind::NotNulTerminated =>
"data provided is not nul terminated",
}
}
}

#[stable(feature = "frombyteswithnulerror_impls", since = "1.17.0")]
impl fmt::Display for FromBytesWithNulError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
self.description().fmt(f)
f.write_str(self.description())?;
if let FromBytesWithNulErrorKind::InteriorNul(pos) = self.kind {
write!(f, " at byte pos {}", pos)?;
}
Ok(())
}
}

@@ -559,10 +589,14 @@ impl CStr {
#[stable(feature = "cstr_from_bytes", since = "1.10.0")]
pub fn from_bytes_with_nul(bytes: &[u8])
-> Result<&CStr, FromBytesWithNulError> {
if bytes.is_empty() || memchr::memchr(0, &bytes) != Some(bytes.len() - 1) {
Err(FromBytesWithNulError { _a: () })
let nul_pos = memchr::memchr(0, bytes);
if let Some(nul_pos) = nul_pos {
if nul_pos + 1 != bytes.len() {
return Err(FromBytesWithNulError::interior_nul(nul_pos));
}
Ok(unsafe { CStr::from_bytes_with_nul_unchecked(bytes) })
} else {
Ok(unsafe { Self::from_bytes_with_nul_unchecked(bytes) })
Err(FromBytesWithNulError::not_nul_terminated())
}
}