explicit_bzero implementation proposal
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
//! strings implementation for Redox, following http://pubs.opengroup.org/onlinepubs/7908799/xsh/strings.h.html
|
||||
|
||||
#![feature(llvm_asm)]
|
||||
use core::ptr;
|
||||
|
||||
use crate::{
|
||||
@@ -22,6 +22,14 @@ pub unsafe extern "C" fn bzero(dst: *mut c_void, n: size_t) {
|
||||
ptr::write_bytes(dst as *mut u8, 0, n);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn explicit_bzero(s: *mut c_void, n: size_t) {
|
||||
for i in 0..n {
|
||||
*(s as *mut u8).add(i) = 0 as u8;
|
||||
}
|
||||
llvm_asm!("" :: "r"(s) : "memory")
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn ffs(i: c_int) -> c_int {
|
||||
if i == 0 {
|
||||
|
||||
@@ -40,4 +40,8 @@ int main(void) {
|
||||
char* str = "hihih";
|
||||
assert(index(str, 'i') == str + 1);
|
||||
assert(rindex(str, 'i') == str + 3);
|
||||
|
||||
char buf[] = "password";
|
||||
explicit_bzero(buf, sizeof(buf));
|
||||
assert(buf[0] == 0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user