Remove libc dependency
This commit is contained in:
parent
69faa5626e
commit
7d35fe36fe
3 changed files with 91 additions and 111 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -367,7 +367,6 @@ dependencies = [
|
|||
"anyhow",
|
||||
"bitreader",
|
||||
"clap",
|
||||
"libc",
|
||||
"openssl",
|
||||
"serde_json",
|
||||
"thiserror",
|
||||
|
|
|
@ -9,7 +9,6 @@ edition = "2021"
|
|||
anyhow = "1.0.71"
|
||||
bitreader = "0.3.7"
|
||||
clap = { version = "4.3.4", features = ["derive"] }
|
||||
libc = "0.2.146"
|
||||
openssl = { git = "https://github.com/anpage/rust-openssl.git" }
|
||||
serde_json = "1.0"
|
||||
thiserror = "1.0.40"
|
||||
|
|
196
src/confid.rs
196
src/confid.rs
|
@ -6,7 +6,7 @@
|
|||
)]
|
||||
|
||||
use std::{
|
||||
ffi::{CStr, CString},
|
||||
ffi::{c_void, CStr, CString},
|
||||
ptr,
|
||||
};
|
||||
|
||||
|
@ -49,7 +49,7 @@ struct C2RustUnnamed_2 {
|
|||
#[derive(Copy, Clone)]
|
||||
#[repr(C)]
|
||||
union C2RustUnnamed_3 {
|
||||
buffer: [libc::c_uchar; 14],
|
||||
buffer: [u8; 14],
|
||||
c2rust_unnamed: C2RustUnnamed_2,
|
||||
}
|
||||
#[derive(Copy, Clone)]
|
||||
|
@ -57,8 +57,8 @@ union C2RustUnnamed_3 {
|
|||
struct C2RustUnnamed_4 {
|
||||
HardwareID: uint64_t,
|
||||
ProductIDLow: uint64_t,
|
||||
ProductIDHigh: libc::c_uchar,
|
||||
KeySHA1: libc::c_ushort,
|
||||
ProductIDHigh: u8,
|
||||
KeySHA1: u16,
|
||||
}
|
||||
static mut f: [uint64_t; 6] = [
|
||||
0_i32 as uint64_t,
|
||||
|
@ -813,7 +813,7 @@ unsafe fn rol(x: u32, shift: i32) -> u32 {
|
|||
x << shift | x >> (32_i32 - shift)
|
||||
}
|
||||
|
||||
unsafe fn sha1_single_block(input: *mut libc::c_uchar, output: *mut libc::c_uchar) {
|
||||
unsafe fn sha1_single_block(input: *mut u8, output: *mut u8) {
|
||||
let mut a = 0x67452301_i32 as u32;
|
||||
let mut b = 0xefcdab89_u32;
|
||||
let mut c = 0x98badcfe_u32;
|
||||
|
@ -905,36 +905,31 @@ unsafe fn sha1_single_block(input: *mut libc::c_uchar, output: *mut libc::c_ucha
|
|||
c = c.wrapping_add(0x98badcfe_u32);
|
||||
d = d.wrapping_add(0x10325476_i32 as u32);
|
||||
e = e.wrapping_add(0xc3d2e1f0_u32);
|
||||
*output.offset(0_i32 as isize) = (a >> 24_i32) as libc::c_uchar;
|
||||
*output.offset(1_i32 as isize) = (a >> 16_i32) as libc::c_uchar;
|
||||
*output.offset(2_i32 as isize) = (a >> 8_i32) as libc::c_uchar;
|
||||
*output.offset(3_i32 as isize) = a as libc::c_uchar;
|
||||
*output.offset(4_i32 as isize) = (b >> 24_i32) as libc::c_uchar;
|
||||
*output.offset(5_i32 as isize) = (b >> 16_i32) as libc::c_uchar;
|
||||
*output.offset(6_i32 as isize) = (b >> 8_i32) as libc::c_uchar;
|
||||
*output.offset(7_i32 as isize) = b as libc::c_uchar;
|
||||
*output.offset(8_i32 as isize) = (c >> 24_i32) as libc::c_uchar;
|
||||
*output.offset(9_i32 as isize) = (c >> 16_i32) as libc::c_uchar;
|
||||
*output.offset(10_i32 as isize) = (c >> 8_i32) as libc::c_uchar;
|
||||
*output.offset(11_i32 as isize) = c as libc::c_uchar;
|
||||
*output.offset(12_i32 as isize) = (d >> 24_i32) as libc::c_uchar;
|
||||
*output.offset(13_i32 as isize) = (d >> 16_i32) as libc::c_uchar;
|
||||
*output.offset(14_i32 as isize) = (d >> 8_i32) as libc::c_uchar;
|
||||
*output.offset(15_i32 as isize) = d as libc::c_uchar;
|
||||
*output.offset(16_i32 as isize) = (e >> 24_i32) as libc::c_uchar;
|
||||
*output.offset(17_i32 as isize) = (e >> 16_i32) as libc::c_uchar;
|
||||
*output.offset(18_i32 as isize) = (e >> 8_i32) as libc::c_uchar;
|
||||
*output.offset(19_i32 as isize) = e as libc::c_uchar;
|
||||
*output.offset(0_i32 as isize) = (a >> 24_i32) as u8;
|
||||
*output.offset(1_i32 as isize) = (a >> 16_i32) as u8;
|
||||
*output.offset(2_i32 as isize) = (a >> 8_i32) as u8;
|
||||
*output.offset(3_i32 as isize) = a as u8;
|
||||
*output.offset(4_i32 as isize) = (b >> 24_i32) as u8;
|
||||
*output.offset(5_i32 as isize) = (b >> 16_i32) as u8;
|
||||
*output.offset(6_i32 as isize) = (b >> 8_i32) as u8;
|
||||
*output.offset(7_i32 as isize) = b as u8;
|
||||
*output.offset(8_i32 as isize) = (c >> 24_i32) as u8;
|
||||
*output.offset(9_i32 as isize) = (c >> 16_i32) as u8;
|
||||
*output.offset(10_i32 as isize) = (c >> 8_i32) as u8;
|
||||
*output.offset(11_i32 as isize) = c as u8;
|
||||
*output.offset(12_i32 as isize) = (d >> 24_i32) as u8;
|
||||
*output.offset(13_i32 as isize) = (d >> 16_i32) as u8;
|
||||
*output.offset(14_i32 as isize) = (d >> 8_i32) as u8;
|
||||
*output.offset(15_i32 as isize) = d as u8;
|
||||
*output.offset(16_i32 as isize) = (e >> 24_i32) as u8;
|
||||
*output.offset(17_i32 as isize) = (e >> 16_i32) as u8;
|
||||
*output.offset(18_i32 as isize) = (e >> 8_i32) as u8;
|
||||
*output.offset(19_i32 as isize) = e as u8;
|
||||
}
|
||||
|
||||
unsafe fn Mix(
|
||||
buffer: *mut libc::c_uchar,
|
||||
bufSize: size_t,
|
||||
key: *const libc::c_uchar,
|
||||
keySize: size_t,
|
||||
) {
|
||||
let mut sha1_input: [libc::c_uchar; 64] = [0; 64];
|
||||
let mut sha1_result: [libc::c_uchar; 20] = [0; 20];
|
||||
unsafe fn Mix(buffer: *mut u8, bufSize: size_t, key: *const u8, keySize: size_t) {
|
||||
let mut sha1_input: [u8; 64] = [0; 64];
|
||||
let mut sha1_result: [u8; 20] = [0; 20];
|
||||
let half: size_t = bufSize.wrapping_div(2_i32 as u64);
|
||||
let mut external_counter = 0_i32;
|
||||
while external_counter < 4_i32 {
|
||||
|
@ -947,18 +942,19 @@ unsafe fn Mix(
|
|||
half as usize,
|
||||
);
|
||||
ptr::copy_nonoverlapping(
|
||||
key as *const libc::c_void,
|
||||
sha1_input.as_mut_ptr().offset(half as isize) as *mut libc::c_void,
|
||||
key as *const c_void,
|
||||
sha1_input.as_mut_ptr().offset(half as isize) as *mut c_void,
|
||||
keySize as usize,
|
||||
);
|
||||
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)
|
||||
as usize] = half.wrapping_add(keySize).wrapping_mul(8_i32 as u64) as libc::c_uchar;
|
||||
sha1_input[(::std::mem::size_of::<[libc::c_uchar; 64]>() as u64).wrapping_sub(2_i32 as u64)
|
||||
as usize] = half
|
||||
.wrapping_add(keySize)
|
||||
sha1_input[half.wrapping_add(keySize) as usize] = 0x80_i32 as u8;
|
||||
sha1_input
|
||||
[(::std::mem::size_of::<[u8; 64]>() as u64).wrapping_sub(1_i32 as u64) as usize] =
|
||||
half.wrapping_add(keySize).wrapping_mul(8_i32 as u64) as u8;
|
||||
sha1_input
|
||||
[(::std::mem::size_of::<[u8; 64]>() as u64).wrapping_sub(2_i32 as u64) as usize] =
|
||||
half.wrapping_add(keySize)
|
||||
.wrapping_mul(8_i32 as u64)
|
||||
.wrapping_div(0x100_i32 as u64) as libc::c_uchar;
|
||||
.wrapping_div(0x100_i32 as u64) as u8;
|
||||
sha1_single_block(sha1_input.as_mut_ptr(), sha1_result.as_mut_ptr());
|
||||
let mut i = half & !3_i32 as u64;
|
||||
while i < half {
|
||||
|
@ -970,10 +966,9 @@ unsafe fn Mix(
|
|||
}
|
||||
i = 0_i32 as size_t;
|
||||
while i < half {
|
||||
let tmp: libc::c_uchar = *buffer.offset(i.wrapping_add(half) as isize);
|
||||
*buffer.offset(i.wrapping_add(half) as isize) = (*buffer.offset(i as isize) as i32
|
||||
^ sha1_result[i as usize] as i32)
|
||||
as libc::c_uchar;
|
||||
let tmp: u8 = *buffer.offset(i.wrapping_add(half) as isize);
|
||||
*buffer.offset(i.wrapping_add(half) as isize) =
|
||||
(*buffer.offset(i as isize) as i32 ^ sha1_result[i as usize] as i32) as u8;
|
||||
*buffer.offset(i as isize) = tmp;
|
||||
i = i.wrapping_add(1);
|
||||
}
|
||||
|
@ -981,14 +976,9 @@ unsafe fn Mix(
|
|||
}
|
||||
}
|
||||
|
||||
unsafe fn Unmix(
|
||||
buffer: *mut libc::c_uchar,
|
||||
bufSize: size_t,
|
||||
key: *const libc::c_uchar,
|
||||
keySize: size_t,
|
||||
) {
|
||||
let mut sha1_input: [libc::c_uchar; 64] = [0; 64];
|
||||
let mut sha1_result: [libc::c_uchar; 20] = [0; 20];
|
||||
unsafe fn Unmix(buffer: *mut u8, bufSize: size_t, key: *const u8, keySize: size_t) {
|
||||
let mut sha1_input: [u8; 64] = [0; 64];
|
||||
let mut sha1_result: [u8; 20] = [0; 20];
|
||||
let half: size_t = bufSize.wrapping_div(2_i32 as u64);
|
||||
let mut external_counter = 0_i32;
|
||||
while external_counter < 4_i32 {
|
||||
|
@ -1001,14 +991,15 @@ unsafe fn Unmix(
|
|||
sha1_input.as_mut_ptr().offset(half as isize),
|
||||
keySize as usize,
|
||||
);
|
||||
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)
|
||||
as usize] = half.wrapping_add(keySize).wrapping_mul(8_i32 as u64) as libc::c_uchar;
|
||||
sha1_input[(::std::mem::size_of::<[libc::c_uchar; 64]>() as u64).wrapping_sub(2_i32 as u64)
|
||||
as usize] = half
|
||||
.wrapping_add(keySize)
|
||||
sha1_input[half.wrapping_add(keySize) as usize] = 0x80_i32 as u8;
|
||||
sha1_input
|
||||
[(::std::mem::size_of::<[u8; 64]>() as u64).wrapping_sub(1_i32 as u64) as usize] =
|
||||
half.wrapping_add(keySize).wrapping_mul(8_i32 as u64) as u8;
|
||||
sha1_input
|
||||
[(::std::mem::size_of::<[u8; 64]>() as u64).wrapping_sub(2_i32 as u64) as usize] =
|
||||
half.wrapping_add(keySize)
|
||||
.wrapping_mul(8_i32 as u64)
|
||||
.wrapping_div(0x100_i32 as u64) as libc::c_uchar;
|
||||
.wrapping_div(0x100_i32 as u64) as u8;
|
||||
sha1_single_block(sha1_input.as_mut_ptr(), sha1_result.as_mut_ptr());
|
||||
let mut i = half & !3_i32 as u64;
|
||||
while i < half {
|
||||
|
@ -1020,10 +1011,9 @@ unsafe fn Unmix(
|
|||
}
|
||||
i = 0_i32 as size_t;
|
||||
while i < half {
|
||||
let tmp: libc::c_uchar = *buffer.offset(i as isize);
|
||||
let tmp: u8 = *buffer.offset(i as isize);
|
||||
*buffer.offset(i as isize) = (*buffer.offset(i.wrapping_add(half) as isize) as i32
|
||||
^ sha1_result[i as usize] as i32)
|
||||
as libc::c_uchar;
|
||||
^ sha1_result[i as usize] as i32) as u8;
|
||||
*buffer.offset(i.wrapping_add(half) as isize) = tmp;
|
||||
i = i.wrapping_add(1);
|
||||
}
|
||||
|
@ -1031,13 +1021,10 @@ unsafe fn Unmix(
|
|||
}
|
||||
}
|
||||
|
||||
unsafe fn Generate(
|
||||
installation_id_str: *const libc::c_char,
|
||||
confirmation_id: *mut libc::c_char,
|
||||
) -> i32 {
|
||||
let mut installation_id: [libc::c_uchar; 19] = [0; 19];
|
||||
unsafe fn Generate(installation_id_str: *const i8, confirmation_id: *mut i8) -> i32 {
|
||||
let mut installation_id: [u8; 19] = [0; 19];
|
||||
let mut installation_id_len: size_t = 0_i32 as size_t;
|
||||
let mut p: *const libc::c_char = installation_id_str;
|
||||
let mut p: *const i8 = installation_id_str;
|
||||
let mut count: size_t = 0_i32 as size_t;
|
||||
let mut totalCount: size_t = 0_i32 as size_t;
|
||||
let mut check: u32 = 0_i32 as u32;
|
||||
|
@ -1073,13 +1060,13 @@ unsafe fn Generate(
|
|||
if totalCount > 45_i32 as u64 {
|
||||
return 2_i32;
|
||||
}
|
||||
let mut carry: libc::c_uchar = d as libc::c_uchar;
|
||||
let mut carry: u8 = d as u8;
|
||||
let mut i = 0_i32 as size_t;
|
||||
while i < installation_id_len {
|
||||
let x: u32 =
|
||||
(installation_id[i as usize] as i32 * 10_i32 + carry as i32) as u32;
|
||||
installation_id[i as usize] = (x & 0xff_i32 as u32) as libc::c_uchar;
|
||||
carry = (x >> 8_i32) as libc::c_uchar;
|
||||
installation_id[i as usize] = (x & 0xff_i32 as u32) as u8;
|
||||
carry = (x >> 8_i32) as u8;
|
||||
i = i.wrapping_add(1);
|
||||
}
|
||||
if carry != 0 {
|
||||
|
@ -1094,15 +1081,15 @@ unsafe fn Generate(
|
|||
if totalCount != 41_i32 as u64 && totalCount < 45_i32 as u64 {
|
||||
return 1_i32;
|
||||
}
|
||||
while installation_id_len < ::std::mem::size_of::<[libc::c_uchar; 19]>() as u64 {
|
||||
installation_id[installation_id_len as usize] = 0_i32 as libc::c_uchar;
|
||||
while installation_id_len < ::std::mem::size_of::<[u8; 19]>() as u64 {
|
||||
installation_id[installation_id_len as usize] = 0_i32 as u8;
|
||||
installation_id_len = installation_id_len.wrapping_add(1);
|
||||
}
|
||||
static mut iid_key: [libc::c_uchar; 4] = [
|
||||
0x6a_i32 as libc::c_uchar,
|
||||
0xc8_i32 as libc::c_uchar,
|
||||
0x5e_i32 as libc::c_uchar,
|
||||
0xd4_i32 as libc::c_uchar,
|
||||
static mut iid_key: [u8; 4] = [
|
||||
0x6a_i32 as u8,
|
||||
0xc8_i32 as u8,
|
||||
0x5e_i32 as u8,
|
||||
0xd4_i32 as u8,
|
||||
];
|
||||
Unmix(
|
||||
installation_id.as_mut_ptr(),
|
||||
|
@ -1124,8 +1111,8 @@ unsafe fn Generate(
|
|||
KeySHA1: 0,
|
||||
};
|
||||
ptr::copy_nonoverlapping(
|
||||
installation_id.as_mut_ptr() as *const libc::c_void,
|
||||
&mut parsed as *mut C2RustUnnamed_4 as *mut libc::c_void,
|
||||
installation_id.as_mut_ptr() as *const c_void,
|
||||
&mut parsed as *mut C2RustUnnamed_4 as *mut c_void,
|
||||
std::mem::size_of::<C2RustUnnamed_4>(),
|
||||
);
|
||||
let productId1: u32 = (parsed.ProductIDLow & ((1_i32 << 17_i32) - 1_i32) as u64) as u32;
|
||||
|
@ -1145,11 +1132,11 @@ unsafe fn Generate(
|
|||
{
|
||||
return 5_i32;
|
||||
}
|
||||
let mut keybuf: [libc::c_uchar; 16] = [0; 16];
|
||||
let mut keybuf: [u8; 16] = [0; 16];
|
||||
let mut hardware_id = parsed.HardwareID;
|
||||
ptr::copy_nonoverlapping(
|
||||
&mut hardware_id as *mut u64 as *const libc::c_void,
|
||||
keybuf.as_mut_ptr() as *mut libc::c_void,
|
||||
&mut hardware_id as *mut u64 as *const c_void,
|
||||
keybuf.as_mut_ptr() as *mut c_void,
|
||||
8,
|
||||
);
|
||||
let mut productIdMixed: uint64_t = (productId1 as uint64_t) << 41_i32
|
||||
|
@ -1157,15 +1144,15 @@ unsafe fn Generate(
|
|||
| (productId3 as uint64_t) << 17_i32
|
||||
| productId4 as u64;
|
||||
ptr::copy_nonoverlapping(
|
||||
&mut productIdMixed as *mut u64 as *const libc::c_void,
|
||||
keybuf.as_mut_ptr().offset(8) as *mut libc::c_void,
|
||||
&mut productIdMixed as *mut u64 as *const c_void,
|
||||
keybuf.as_mut_ptr().offset(8) as *mut c_void,
|
||||
8,
|
||||
);
|
||||
let mut d_0: TDivisor = TDivisor {
|
||||
u: [0; 2],
|
||||
v: [0; 2],
|
||||
};
|
||||
let mut attempt = 0_i32 as libc::c_uchar;
|
||||
let mut attempt = 0_i32 as u8;
|
||||
while attempt as i32 <= 0x80_i32 {
|
||||
let mut u: C2RustUnnamed_3 = C2RustUnnamed_3 { buffer: [0; 14] };
|
||||
u.c2rust_unnamed.lo = 0_i32 as uint64_t;
|
||||
|
@ -1284,7 +1271,7 @@ unsafe fn Generate(
|
|||
as uint64_t as uint64_t;
|
||||
}
|
||||
}
|
||||
let mut decimal: [libc::c_uchar; 35] = [0; 35];
|
||||
let mut decimal: [u8; 35] = [0; 35];
|
||||
let mut i = 0_i32 as size_t;
|
||||
while i < 35_i32 as u64 {
|
||||
let c: u32 = (e.c2rust_unnamed_0.encoded[3_i32 as usize]).wrapping_rem(10_i32 as u32);
|
||||
|
@ -1309,42 +1296,37 @@ unsafe fn Generate(
|
|||
e.c2rust_unnamed_0.encoded[0_i32 as usize] =
|
||||
((c3 as uint64_t) << 32_i32 | e.c2rust_unnamed_0.encoded[0_i32 as usize] as u64)
|
||||
.wrapping_div(10_i32 as u64) as uint32_t;
|
||||
decimal[(34_i32 as u64).wrapping_sub(i) as usize] = c4 as libc::c_uchar;
|
||||
decimal[(34_i32 as u64).wrapping_sub(i) as usize] = c4 as u8;
|
||||
i = i.wrapping_add(1);
|
||||
}
|
||||
let mut q: *mut libc::c_char = confirmation_id;
|
||||
let mut q: *mut i8 = confirmation_id;
|
||||
i = 0_i32 as size_t;
|
||||
while i < 7_i32 as u64 {
|
||||
if i != 0 {
|
||||
let fresh2 = q;
|
||||
q = q.offset(1);
|
||||
*fresh2 = '-' as i32 as libc::c_char;
|
||||
*fresh2 = '-' as i32 as i8;
|
||||
}
|
||||
let p_0: *mut libc::c_uchar = decimal
|
||||
let p_0: *mut u8 = decimal
|
||||
.as_mut_ptr()
|
||||
.offset(i.wrapping_mul(5_i32 as u64) as isize);
|
||||
*q.offset(0_i32 as isize) =
|
||||
(*p_0.offset(0_i32 as isize) as i32 + '0' as i32) as libc::c_char;
|
||||
*q.offset(1_i32 as isize) =
|
||||
(*p_0.offset(1_i32 as isize) as i32 + '0' as i32) as libc::c_char;
|
||||
*q.offset(2_i32 as isize) =
|
||||
(*p_0.offset(2_i32 as isize) as i32 + '0' as i32) as libc::c_char;
|
||||
*q.offset(3_i32 as isize) =
|
||||
(*p_0.offset(3_i32 as isize) as i32 + '0' as i32) as libc::c_char;
|
||||
*q.offset(4_i32 as isize) =
|
||||
(*p_0.offset(4_i32 as isize) as i32 + '0' as i32) as libc::c_char;
|
||||
*q.offset(0_i32 as isize) = (*p_0.offset(0_i32 as isize) as i32 + '0' as i32) as i8;
|
||||
*q.offset(1_i32 as isize) = (*p_0.offset(1_i32 as isize) as i32 + '0' as i32) as i8;
|
||||
*q.offset(2_i32 as isize) = (*p_0.offset(2_i32 as isize) as i32 + '0' as i32) as i8;
|
||||
*q.offset(3_i32 as isize) = (*p_0.offset(3_i32 as isize) as i32 + '0' as i32) as i8;
|
||||
*q.offset(4_i32 as isize) = (*p_0.offset(4_i32 as isize) as i32 + '0' as i32) as i8;
|
||||
*q.offset(5_i32 as isize) = ((*p_0.offset(0_i32 as isize) as i32
|
||||
+ *p_0.offset(1_i32 as isize) as i32 * 2_i32
|
||||
+ *p_0.offset(2_i32 as isize) as i32
|
||||
+ *p_0.offset(3_i32 as isize) as i32 * 2_i32
|
||||
+ *p_0.offset(4_i32 as isize) as i32)
|
||||
% 7_i32
|
||||
+ '0' as i32) as libc::c_char;
|
||||
+ '0' as i32) as i8;
|
||||
q = q.offset(6_i32 as isize);
|
||||
i = i.wrapping_add(1);
|
||||
}
|
||||
let fresh3 = q.offset(1);
|
||||
*fresh3 = 0_i32 as libc::c_char;
|
||||
*fresh3 = 0_i32 as i8;
|
||||
0_i32
|
||||
}
|
||||
|
||||
|
@ -1368,7 +1350,7 @@ pub fn generate(installation_id: &str) -> Result<String, ConfirmationIdError> {
|
|||
unsafe {
|
||||
let inst_id = CString::new(installation_id).unwrap();
|
||||
let conf_id = [0u8; 49];
|
||||
let result = Generate(inst_id.as_ptr(), conf_id.as_ptr() as *mut libc::c_char);
|
||||
let result = Generate(inst_id.as_ptr(), conf_id.as_ptr() as *mut i8);
|
||||
match result {
|
||||
0 => {}
|
||||
1 => return Err(ConfirmationIdError::TooShort),
|
||||
|
@ -1379,7 +1361,7 @@ pub fn generate(installation_id: &str) -> Result<String, ConfirmationIdError> {
|
|||
6 => return Err(ConfirmationIdError::Unlucky),
|
||||
_ => panic!("Unknown error code: {}", result),
|
||||
}
|
||||
Ok(CStr::from_ptr(conf_id.as_ptr() as *const libc::c_char)
|
||||
Ok(CStr::from_ptr(conf_id.as_ptr() as *const i8)
|
||||
.to_str()
|
||||
.unwrap()
|
||||
.to_string())
|
||||
|
|
Loading…
Add table
Reference in a new issue