diff --git a/src/libcore/str.rs b/src/libcore/str.rs index ca7bb819443b6..1f1f5a22ac21c 100644 --- a/src/libcore/str.rs +++ b/src/libcore/str.rs @@ -17,6 +17,7 @@ export from_char, from_chars, from_cstr, + from_cstr_len, concat, connect, @@ -210,6 +211,24 @@ unsafe fn from_cstr(cstr: sbuf) -> str { ret from_bytes(res); } +/* +Function: from_cstr_len + +Create a Rust string from a C string of the given length +*/ +unsafe fn from_cstr_len(cstr: sbuf, len: uint) -> str { + let res = []; + let start = cstr; + let curr = start; + let i = 0u; + while i < len { + vec::push(res, *curr); + i += 1u; + curr = ptr::offset(start, i); + } + ret from_bytes(res); +} + /* Function: concat @@ -1960,6 +1979,14 @@ mod tests { assert (c == "AAAAAAA"); } + #[test] + fn test_from_cstr_len() unsafe { + let a = [65u8, 65u8, 65u8, 65u8, 65u8, 65u8, 65u8, 0u8]; + let b = vec::to_ptr(a); + let c = from_cstr_len(b, 3u); + assert (c == "AAA"); + } + #[test] fn test_as_buf() unsafe { let a = "Abcdefg";