fix strlcpy and strlcat

This commit is contained in:
auronandace
2025-12-15 07:58:44 +00:00
parent ec8d28b164
commit 6c62e7e401
+19 -9
View File
@@ -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
}