getopt and wchar cleanup

This commit is contained in:
auronandace
2026-02-28 15:50:10 +00:00
parent 0f52382daa
commit 4b9a15ce7d
5 changed files with 24 additions and 25 deletions
+1
View File
@@ -15,6 +15,7 @@ impl timespec {
// TODO: Write test
/// similar logic with timeradd
#[allow(clippy::should_implement_trait)] // not to confuse std::ops::Add
pub fn add(base: timespec, interval: timespec) -> Option<timespec> {
let delta_sec = base.tv_sec.checked_add(interval.tv_sec)?;
let delta_nsec = base.tv_nsec.checked_add(interval.tv_nsec)?;
+8 -8
View File
@@ -112,15 +112,15 @@ pub unsafe extern "C" fn getopt_long(
} else if *optstring == b':' as c_char {
return c_int::from(b':');
} else {
stdio::fputs((*argv).cast_const(), &mut *stdio::stderr);
stdio::fputs((*argv).cast_const(), &raw mut *stdio::stderr);
stdio::fputs(
c": option '--".as_ptr().cast(),
&mut *stdio::stderr,
&raw mut *stdio::stderr,
);
stdio::fputs(current_arg, &mut *stdio::stderr);
stdio::fputs(current_arg, &raw mut *stdio::stderr);
stdio::fputs(
c"' requires an argument\n".as_ptr().cast(),
&mut *stdio::stderr,
&raw mut *stdio::stderr,
);
return c_int::from(b'?');
}
@@ -160,10 +160,10 @@ unsafe fn parse_arg(
let print_error = |desc: &[u8]| unsafe {
// NOTE: we don't use fprintf to get around the usage of va_list
stdio::fputs((*argv).cast_const(), &mut *stdio::stderr);
stdio::fputs(desc.as_ptr().cast(), &mut *stdio::stderr);
stdio::fputc((*current_arg).into(), &mut *stdio::stderr);
stdio::fputc(b'\n'.into(), &mut *stdio::stderr);
stdio::fputs((*argv).cast_const(), &raw mut *stdio::stderr);
stdio::fputs(desc.as_ptr().cast(), &raw mut *stdio::stderr);
stdio::fputc((*current_arg).into(), &raw mut *stdio::stderr);
stdio::fputc(b'\n'.into(), &raw mut *stdio::stderr);
};
match unsafe { find_option(*current_arg, optstring) } {
+2 -4
View File
@@ -268,10 +268,8 @@ fn list_dir(
// Restore the old errno
platform::ERRNO.set(old_errno);
if errno != 0 {
if unsafe { errfunc(path.as_ptr(), errno) } != 0 || abort_on_error {
return Err(GLOB_ABORTED);
}
if errno != 0 && (unsafe { errfunc(path.as_ptr(), errno) } != 0 || abort_on_error) {
return Err(GLOB_ABORTED);
}
Ok(results)
+1 -1
View File
@@ -87,7 +87,7 @@ impl<'a> LookAheadFile<'a> {
let mut wc: wchar_t = 0;
unsafe {
mbrtowc(
&mut wc,
&raw mut wc,
buf.as_ptr().cast::<c_char>(),
encoded_length,
ptr::null_mut(),
+12 -12
View File
@@ -49,7 +49,7 @@ pub unsafe extern "C" fn btowc(c: c_int) -> wint_t {
let mut ps: mbstate_t = mbstate_t;
let mut wc: wchar_t = 0;
let saved_errno = platform::ERRNO.get();
let status = unsafe { mbrtowc(&mut wc, ptr::from_ref::<c_char>(&c), 1, &mut ps) };
let status = unsafe { mbrtowc(&raw mut wc, ptr::from_ref::<c_char>(&c), 1, &raw mut ps) };
if status == usize::MAX || status == usize::MAX - 1 {
platform::ERRNO.set(saved_errno);
return WEOF;
@@ -101,7 +101,7 @@ pub unsafe extern "C" fn fgetwc(stream: *mut FILE) -> wint_t {
unsafe {
mbrtowc(
&mut wc,
&raw mut wc,
buf.as_ptr().cast::<c_char>(),
encoded_length,
ptr::null_mut(),
@@ -140,8 +140,8 @@ pub unsafe extern "C" fn fputwc(wc: wchar_t, stream: *mut FILE) -> wint_t {
let amount = unsafe { wcrtomb(bytes.as_mut_ptr(), wc, &raw mut INTERNAL) };
for i in 0..amount {
unsafe { fputc(c_int::from(bytes[i]), &mut *stream) };
for b in bytes.iter().take(amount) {
unsafe { fputc(c_int::from(*b), &raw mut *stream) };
}
wc as wint_t
@@ -253,7 +253,7 @@ pub unsafe extern "C" fn mbsnrtowcs(
while (dst_ptr.is_null() || dst_offset < dst_len) && src_offset < src_len {
let ps_copy = unsafe { *ps };
let mut wc: wchar_t = 0;
let amount = unsafe { mbrtowc(&mut wc, src.add(src_offset), src_len - src_offset, ps) };
let amount = unsafe { mbrtowc(&raw mut wc, src.add(src_offset), src_len - src_offset, ps) };
// Stop in the event a decoding error occured.
if amount == -1isize as usize {
@@ -305,13 +305,13 @@ pub unsafe extern "C" fn mbsrtowcs(
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/putwc.html>.
#[unsafe(no_mangle)]
pub unsafe extern "C" fn putwc(wc: wchar_t, stream: *mut FILE) -> wint_t {
unsafe { fputwc(wc, &mut *stream) }
unsafe { fputwc(wc, &raw mut *stream) }
}
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/putwchar.html>.
#[unsafe(no_mangle)]
pub unsafe extern "C" fn putwchar(wc: wchar_t) -> wint_t {
unsafe { fputwc(wc, &mut *stdout) }
unsafe { fputwc(wc, &raw mut *stdout) }
}
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/vswscanf.html>.
@@ -358,7 +358,7 @@ pub unsafe extern "C" fn ungetwc(wc: wint_t, stream: &mut FILE) -> wint_t {
If we called ungetc in the non-reversed order, we would get [167, 195]
*/
for i in 0..amount {
unsafe { ungetc(c_int::from(bytes[amount - 1 - i]), &mut *stream) };
unsafe { ungetc(c_int::from(bytes[amount - 1 - i]), &raw mut *stream) };
}
wc
@@ -392,13 +392,13 @@ pub unsafe extern "C" fn fwprintf(
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/vfwprintf.html>.
#[unsafe(no_mangle)]
pub unsafe extern "C" fn vwprintf(format: *const wchar_t, arg: va_list) -> c_int {
unsafe { vfwprintf(&mut *stdout, format, arg) }
unsafe { vfwprintf(&raw mut *stdout, format, arg) }
}
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/fwprintf.html>.
#[unsafe(no_mangle)]
pub unsafe extern "C" fn wprintf(format: *const wchar_t, mut __valist: ...) -> c_int {
unsafe { vfwprintf(&mut *stdout, format, __valist.as_va_list()) }
unsafe { vfwprintf(&raw mut *stdout, format, __valist.as_va_list()) }
}
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/vfwprintf.html>.
@@ -478,7 +478,7 @@ pub unsafe extern "C" fn wcsrtombs(
) -> size_t {
let mut mbs = mbstate_t {};
if st.is_null() {
st = &mut mbs;
st = &raw mut mbs;
}
unsafe { wcsnrtombs(s, ws, size_t::MAX, n, st) }
}
@@ -661,7 +661,7 @@ pub unsafe extern "C" fn wcsnrtombs(
let mut mbs = mbstate_t {};
if ps.is_null() {
ps = &mut mbs;
ps = &raw mut mbs;
}
while read < nwc {