diff options
| author | Erick Tryzelaar <erick.tryzelaar@gmail.com> | 2013-08-06 21:06:12 -0700 |
|---|---|---|
| committer | Erick Tryzelaar <erick.tryzelaar@gmail.com> | 2013-08-07 14:06:45 -0700 |
| commit | e053bff5d0c83a5b36afcaf4c58a40a27162ec0f (patch) | |
| tree | 747f485962acb15803ccf8f4a2500c322b9dd314 /src/libstd | |
| parent | 5eaa4d1d2f6eafc4233892d3d1dafb0d05799ac3 (diff) | |
| download | rust-e053bff5d0c83a5b36afcaf4c58a40a27162ec0f.tar.gz rust-e053bff5d0c83a5b36afcaf4c58a40a27162ec0f.zip | |
std: Fix c_str.iter() and add test
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/c_str.rs | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/src/libstd/c_str.rs b/src/libstd/c_str.rs index 6c5853019b0..25c6d4379fa 100644 --- a/src/libstd/c_str.rs +++ b/src/libstd/c_str.rs @@ -148,10 +148,10 @@ pub struct CStringIterator<'self> { impl<'self> Iterator<libc::c_char> for CStringIterator<'self> { fn next(&mut self) -> Option<libc::c_char> { - if self.ptr.is_null() { + let ch = unsafe { *self.ptr }; + if ch == 0 { None } else { - let ch = unsafe { *self.ptr }; self.ptr = ptr::offset(self.ptr, 1); Some(ch) } @@ -163,6 +163,7 @@ mod tests { use super::*; use libc; use ptr; + use option::{Some, None}; #[test] fn test_to_c_str() { @@ -210,7 +211,23 @@ mod tests { #[should_fail] #[ignore(cfg(windows))] fn test_with_ref_empty_fail() { - let c_str = CString::new(ptr::null(), false); + let c_str = unsafe { CString::new(ptr::null(), false) }; c_str.with_ref(|_| ()); } + + #[test] + fn test_iterator() { + let c_str = "".to_c_str(); + let mut iter = c_str.iter(); + assert_eq!(iter.next(), None); + + let c_str = "hello".to_c_str(); + let mut iter = c_str.iter(); + assert_eq!(iter.next(), Some('h' as libc::c_char)); + assert_eq!(iter.next(), Some('e' as libc::c_char)); + assert_eq!(iter.next(), Some('l' as libc::c_char)); + assert_eq!(iter.next(), Some('l' as libc::c_char)); + assert_eq!(iter.next(), Some('o' as libc::c_char)); + assert_eq!(iter.next(), None); + } } |
