1use libc::*; 2 3pub const ERR_TXT_MALLOCED: c_int = 0x01; 4pub const ERR_TXT_STRING: c_int = 0x02; 5 6pub const ERR_LIB_SYS: c_int = 2; 7pub const ERR_LIB_PEM: c_int = 9; 8pub const ERR_LIB_ASN1: c_int = 13; 9 10cfg_if! { 11 if #[cfg(ossl300)] { 12 pub const ERR_SYSTEM_FLAG: c_ulong = c_int::max_value() as c_ulong + 1; 13 pub const ERR_SYSTEM_MASK: c_ulong = c_int::max_value() as c_ulong; 14 15 pub const ERR_LIB_OFFSET: c_ulong = 23; 16 pub const ERR_LIB_MASK: c_ulong = 0xff; 17 pub const ERR_RFLAGS_OFFSET: c_ulong = 18; 18 pub const ERR_RFLAGS_MASK: c_ulong = 0x1f; 19 pub const ERR_REASON_MASK: c_ulong = 0x7FFFFF; 20 21 pub const ERR_RFLAG_FATAL: c_ulong = 0x1 << ERR_RFLAGS_OFFSET; 22 23 pub const fn ERR_SYSTEM_ERROR(errcode: c_ulong) -> bool { 24 errcode & ERR_SYSTEM_FLAG != 0 25 } 26 27 pub const fn ERR_GET_LIB(errcode: c_ulong) -> c_int { 28 // hacks since `if` isn't yet stable in const functions :( 29 ((ERR_LIB_SYS as c_ulong * (ERR_SYSTEM_ERROR(errcode) as c_ulong)) | 30 (((errcode >> ERR_LIB_OFFSET) & ERR_LIB_MASK) * (!ERR_SYSTEM_ERROR(errcode) as c_ulong))) as c_int 31 } 32 33 pub const fn ERR_GET_FUNC(_errcode: c_ulong) -> c_int { 34 0 35 } 36 37 pub const fn ERR_GET_REASON(errcode: c_ulong) -> c_int { 38 // hacks since `if` isn't yet stable in const functions :( 39 ((ERR_LIB_SYS as c_ulong * (ERR_SYSTEM_ERROR(errcode) as c_ulong)) | 40 ((errcode & ERR_REASON_MASK) * (!ERR_SYSTEM_ERROR(errcode) as c_ulong))) as c_int 41 } 42 43 pub const fn ERR_PACK(lib: c_int, _func: c_int, reason: c_int) -> c_ulong { 44 ((lib as c_ulong & ERR_LIB_MASK) << ERR_LIB_OFFSET) | 45 (reason as c_ulong & ERR_REASON_MASK) 46 } 47 } else { 48 pub const fn ERR_PACK(l: c_int, f: c_int, r: c_int) -> c_ulong { 49 ((l as c_ulong & 0x0FF) << 24) | 50 ((f as c_ulong & 0xFFF) << 12) | 51 (r as c_ulong & 0xFFF) 52 } 53 54 pub const fn ERR_GET_LIB(l: c_ulong) -> c_int { 55 ((l >> 24) & 0x0FF) as c_int 56 } 57 58 pub const fn ERR_GET_FUNC(l: c_ulong) -> c_int { 59 ((l >> 12) & 0xFFF) as c_int 60 } 61 62 pub const fn ERR_GET_REASON(l: c_ulong) -> c_int { 63 (l & 0xFFF) as c_int 64 } 65 } 66} 67