Skip to content
Snippets Groups Projects
Commit 629c20f0 authored by Alex Lyon's avatar Alex Lyon
Browse files

string: ensure resulting string has NUL byte

parent 3e1b945e
No related branches found
No related tags found
No related merge requests found
...@@ -162,5 +162,5 @@ pub enum Errno { ...@@ -162,5 +162,5 @@ pub enum Errno {
// Operation would block (may be the same value as [EAGAIN]) // Operation would block (may be the same value as [EAGAIN])
EWOULDBLOCK, EWOULDBLOCK,
// Cross-device link // Cross-device link
EXDEV EXDEV,
} }
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
#![no_std] #![no_std]
extern crate errno;
extern crate platform; extern crate platform;
extern crate stdlib; extern crate stdlib;
extern crate errno;
use platform::types::*; use platform::types::*;
use errno::*; use errno::*;
...@@ -94,10 +94,10 @@ pub unsafe extern "C" fn strdup(s1: *const c_char) -> *mut c_char { ...@@ -94,10 +94,10 @@ pub unsafe extern "C" fn strdup(s1: *const c_char) -> *mut c_char {
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn strndup(s1: *const c_char, size: usize) -> *mut c_char { pub unsafe extern "C" fn strndup(s1: *const c_char, size: usize) -> *mut c_char {
// the "+ 1" is to account for the NUL byte let len = strnlen(s1, size);
let len = strnlen(s1, size) + 1;
let buffer = stdlib::malloc(len) as *mut c_char; // the "+ 1" is to account for the NUL byte
let buffer = stdlib::malloc(len + 1) as *mut c_char;
if buffer.is_null() { if buffer.is_null() {
platform::errno = Errno::ENOMEM as c_int; platform::errno = Errno::ENOMEM as c_int;
} else { } else {
...@@ -105,6 +105,7 @@ pub unsafe extern "C" fn strndup(s1: *const c_char, size: usize) -> *mut c_char ...@@ -105,6 +105,7 @@ pub unsafe extern "C" fn strndup(s1: *const c_char, size: usize) -> *mut c_char
for i in 0..len as isize { for i in 0..len as isize {
*buffer.offset(i) = *s1.offset(i); *buffer.offset(i) = *s1.offset(i);
} }
*buffer.offset(len as isize) = 0;
} }
buffer buffer
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment