Skip to content

Commit

Permalink
Rollup merge of #102445 - jmillikin:cstr-is-empty, r=Mark-Simulacrum
Browse files Browse the repository at this point in the history
Add `is_empty()` method to `core::ffi::CStr`.

ACP: rust-lang/libs-team#106

Tracking issue: #102444
  • Loading branch information
matthiaskrgr authored Oct 11, 2022
2 parents 51320b3 + 9d5e3a1 commit d10b47e
Showing 1 changed file with 28 additions and 0 deletions.
28 changes: 28 additions & 0 deletions library/core/src/ffi/c_str.rs
Original file line number Diff line number Diff line change
Expand Up @@ -474,6 +474,34 @@ impl CStr {
self.inner.as_ptr()
}

/// Returns `true` if `self.to_bytes()` has a length of 0.
///
/// # Examples
///
/// ```
/// #![feature(cstr_is_empty)]
///
/// use std::ffi::CStr;
/// # use std::ffi::FromBytesWithNulError;
///
/// # fn main() { test().unwrap(); }
/// # fn test() -> Result<(), FromBytesWithNulError> {
/// let cstr = CStr::from_bytes_with_nul(b"foo\0")?;
/// assert!(!cstr.is_empty());
///
/// let empty_cstr = CStr::from_bytes_with_nul(b"\0")?;
/// assert!(empty_cstr.is_empty());
/// # Ok(())
/// # }
/// ```
#[inline]
#[unstable(feature = "cstr_is_empty", issue = "102444")]
pub const fn is_empty(&self) -> bool {
// SAFETY: We know there is at least one byte; for empty strings it
// is the NUL terminator.
(unsafe { self.inner.get_unchecked(0) }) == &0
}

/// Converts this C string to a byte slice.
///
/// The returned slice will **not** contain the trailing nul terminator that this C
Expand Down

0 comments on commit d10b47e

Please sign in to comment.