fix strlcpy and strlcat
This commit is contained in:
@@ -381,11 +381,11 @@ pub unsafe extern "C" fn strerror_r(errnum: c_int, buf: *mut c_char, buflen: siz
|
||||
|
||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/strlcat.html>.
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn strlcat(dst: *mut c_char, src: *const c_char, n: size_t) -> size_t {
|
||||
let len = strlen(dst) as isize;
|
||||
let d = dst.offset(len);
|
||||
|
||||
strlcpy(d, src, n)
|
||||
pub unsafe extern "C" fn strlcat(dst: *mut c_char, src: *const c_char, dstsize: size_t) -> size_t {
|
||||
let dst_len = unsafe { strlen(dst) };
|
||||
let d = unsafe { dst.offset(dst_len as isize) };
|
||||
let src_len = unsafe { strlcpy(d, src, dstsize) };
|
||||
src_len + if dst_len > dstsize { dstsize } else { dst_len }
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
@@ -407,15 +407,25 @@ pub unsafe extern "C" fn strsep(str_: *mut *mut c_char, sep: *const c_char) -> *
|
||||
|
||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/strlcat.html>.
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn strlcpy(dst: *mut c_char, src: *const c_char, n: size_t) -> size_t {
|
||||
pub unsafe extern "C" fn strlcpy(dst: *mut c_char, src: *const c_char, dstsize: size_t) -> size_t {
|
||||
let mut i = 0;
|
||||
|
||||
while *src.add(i) != 0 && i < n {
|
||||
*dst.add(i) = *src.add(i);
|
||||
while unsafe { *src.add(i) } != 0 && i < dstsize {
|
||||
unsafe {
|
||||
*dst.add(i) = *src.add(i);
|
||||
}
|
||||
i += 1;
|
||||
}
|
||||
|
||||
*dst.add(i) = 0;
|
||||
if dstsize != 0 {
|
||||
unsafe {
|
||||
*dst.add(i) = 0;
|
||||
}
|
||||
}
|
||||
|
||||
while unsafe { *src.add(i) } != 0 {
|
||||
i += 1;
|
||||
}
|
||||
|
||||
i as size_t
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user