Remove usage of libc functions

This commit is contained in:
Alex Page 2023-06-21 21:40:58 -04:00
parent a0657d2652
commit 69faa5626e

View file

@ -5,13 +5,13 @@
clippy::too_many_arguments clippy::too_many_arguments
)] )]
use std::ffi::{CStr, CString}; use std::{
ffi::{CStr, CString},
ptr,
};
use thiserror::Error; use thiserror::Error;
extern "C" {
fn memcpy(_: *mut libc::c_void, _: *const libc::c_void, _: u64) -> *mut libc::c_void;
fn memset(_: *mut libc::c_void, _: i32, _: u64) -> *mut libc::c_void;
}
type size_t = u64; type size_t = u64;
type int64_t = i64; type int64_t = i64;
type uint16_t = u16; type uint16_t = u16;
@ -626,11 +626,12 @@ unsafe fn divisor_add(src1: *const TDivisor, src2: *const TDivisor, mut dst: *mu
v[i as usize] = residue_mul(v[i as usize], c1[0_i32 as usize]); v[i as usize] = residue_mul(v[i as usize], c1[0_i32 as usize]);
i += 1; i += 1;
} }
memcpy( tmp[0] = f[0];
tmp.as_mut_ptr() as *mut libc::c_void, tmp[1] = f[1];
f.as_ptr() as *const libc::c_void, tmp[2] = f[2];
(6_i32 as u64).wrapping_mul(::std::mem::size_of::<uint64_t>() as u64), tmp[3] = f[3];
); tmp[4] = f[4];
tmp[5] = f[5];
tmpdeg = 5_i32; tmpdeg = 5_i32;
tmpdeg = polynomial_mul( tmpdeg = polynomial_mul(
1_i32, 1_i32,
@ -675,11 +676,9 @@ unsafe fn divisor_add(src1: *const TDivisor, src2: *const TDivisor, mut dst: *mu
udiv.as_mut_ptr(), udiv.as_mut_ptr(),
); );
vdeg -= ddeg; vdeg -= ddeg;
memcpy( for i in 0..=vdeg {
v.as_mut_ptr() as *mut libc::c_void, v[i as usize] = udiv[i as usize];
udiv.as_mut_ptr() as *const libc::c_void, }
((vdeg + 1_i32) as u64).wrapping_mul(::std::mem::size_of::<uint64_t>() as u64),
);
} }
} }
vdeg = polynomial_div_monic( vdeg = polynomial_div_monic(
@ -939,20 +938,18 @@ unsafe fn Mix(
let half: size_t = bufSize.wrapping_div(2_i32 as u64); let half: size_t = bufSize.wrapping_div(2_i32 as u64);
let mut external_counter = 0_i32; let mut external_counter = 0_i32;
while external_counter < 4_i32 { while external_counter < 4_i32 {
memset( for n in &mut sha1_input {
sha1_input.as_mut_ptr() as *mut libc::c_void, *n = 0;
0_i32, }
::std::mem::size_of::<[libc::c_uchar; 64]>() as u64, ptr::copy_nonoverlapping(
buffer.offset(half as isize),
sha1_input.as_mut_ptr(),
half as usize,
); );
memcpy( ptr::copy_nonoverlapping(
sha1_input.as_mut_ptr() as *mut libc::c_void,
buffer.offset(half as isize) as *const libc::c_void,
half,
);
memcpy(
sha1_input.as_mut_ptr().offset(half as isize) as *mut libc::c_void,
key as *const libc::c_void, key as *const libc::c_void,
keySize, sha1_input.as_mut_ptr().offset(half as isize) as *mut libc::c_void,
keySize as usize,
); );
sha1_input[half.wrapping_add(keySize) as usize] = 0x80_i32 as libc::c_uchar; sha1_input[half.wrapping_add(keySize) as usize] = 0x80_i32 as libc::c_uchar;
sha1_input[(::std::mem::size_of::<[libc::c_uchar; 64]>() as u64).wrapping_sub(1_i32 as u64) sha1_input[(::std::mem::size_of::<[libc::c_uchar; 64]>() as u64).wrapping_sub(1_i32 as u64)
@ -995,20 +992,14 @@ unsafe fn Unmix(
let half: size_t = bufSize.wrapping_div(2_i32 as u64); let half: size_t = bufSize.wrapping_div(2_i32 as u64);
let mut external_counter = 0_i32; let mut external_counter = 0_i32;
while external_counter < 4_i32 { while external_counter < 4_i32 {
memset( for n in &mut sha1_input {
sha1_input.as_mut_ptr() as *mut libc::c_void, *n = 0;
0_i32, }
::std::mem::size_of::<[libc::c_uchar; 64]>() as u64, ptr::copy_nonoverlapping(buffer, sha1_input.as_mut_ptr(), half as usize);
); ptr::copy_nonoverlapping(
memcpy( key,
sha1_input.as_mut_ptr() as *mut libc::c_void, sha1_input.as_mut_ptr().offset(half as isize),
buffer as *const libc::c_void, keySize as usize,
half,
);
memcpy(
sha1_input.as_mut_ptr().offset(half as isize) as *mut libc::c_void,
key as *const libc::c_void,
keySize,
); );
sha1_input[half.wrapping_add(keySize) as usize] = 0x80_i32 as libc::c_uchar; sha1_input[half.wrapping_add(keySize) as usize] = 0x80_i32 as libc::c_uchar;
sha1_input[(::std::mem::size_of::<[libc::c_uchar; 64]>() as u64).wrapping_sub(1_i32 as u64) sha1_input[(::std::mem::size_of::<[libc::c_uchar; 64]>() as u64).wrapping_sub(1_i32 as u64)
@ -1132,10 +1123,10 @@ unsafe fn Generate(
ProductIDHigh: 0, ProductIDHigh: 0,
KeySHA1: 0, KeySHA1: 0,
}; };
memcpy( ptr::copy_nonoverlapping(
&mut parsed as *mut C2RustUnnamed_4 as *mut libc::c_void,
installation_id.as_mut_ptr() as *const libc::c_void, installation_id.as_mut_ptr() as *const libc::c_void,
::std::mem::size_of::<C2RustUnnamed_4>() as u64, &mut parsed as *mut C2RustUnnamed_4 as *mut libc::c_void,
std::mem::size_of::<C2RustUnnamed_4>(),
); );
let productId1: u32 = (parsed.ProductIDLow & ((1_i32 << 17_i32) - 1_i32) as u64) as u32; let productId1: u32 = (parsed.ProductIDLow & ((1_i32 << 17_i32) - 1_i32) as u64) as u32;
let productId2: u32 = let productId2: u32 =
@ -1156,19 +1147,19 @@ unsafe fn Generate(
} }
let mut keybuf: [libc::c_uchar; 16] = [0; 16]; let mut keybuf: [libc::c_uchar; 16] = [0; 16];
let mut hardware_id = parsed.HardwareID; let mut hardware_id = parsed.HardwareID;
memcpy( ptr::copy_nonoverlapping(
&mut hardware_id as *mut u64 as *const libc::c_void,
keybuf.as_mut_ptr() as *mut libc::c_void, keybuf.as_mut_ptr() as *mut libc::c_void,
&mut hardware_id as *mut uint64_t as *const libc::c_void, 8,
8_i32 as u64,
); );
let mut productIdMixed: uint64_t = (productId1 as uint64_t) << 41_i32 let mut productIdMixed: uint64_t = (productId1 as uint64_t) << 41_i32
| (productId2 as uint64_t) << 58_i32 | (productId2 as uint64_t) << 58_i32
| (productId3 as uint64_t) << 17_i32 | (productId3 as uint64_t) << 17_i32
| productId4 as u64; | productId4 as u64;
memcpy( ptr::copy_nonoverlapping(
keybuf.as_mut_ptr().offset(8_i32 as isize) as *mut libc::c_void, &mut productIdMixed as *mut u64 as *const libc::c_void,
&mut productIdMixed as *mut uint64_t as *const libc::c_void, keybuf.as_mut_ptr().offset(8) as *mut libc::c_void,
8_i32 as u64, 8,
); );
let mut d_0: TDivisor = TDivisor { let mut d_0: TDivisor = TDivisor {
u: [0; 2], u: [0; 2],