brotli_ffi/
lib.rs

1#![no_std]
2#![cfg_attr(not(feature = "std"), feature(lang_items))]
3
4pub extern crate brotli;
5#[cfg(feature = "std")]
6extern crate std;
7
8use core::ptr::null_mut;
9
10pub use brotli::ffi::compressor::*;
11// FIXME: this is just wrong, and needs to be fixed
12#[allow(unknown_lints, ambiguous_glob_reexports)]
13pub use brotli::ffi::decompressor::*;
14pub use brotli::ffi::multicompress::*;
15pub use brotli::*;
16
17#[cfg(feature = "std")]
18unsafe fn std_only_functions() {
19    let _ =
20        brotli::ffi::decompressor::CBrotliDecoderDecompress(0, null_mut(), null_mut(), null_mut());
21}
22#[cfg(not(feature = "std"))]
23unsafe fn std_only_functions() {}
24
25#[no_mangle]
26pub unsafe extern "C" fn instantiate_functions(must_be_null: *const u8) {
27    if !must_be_null.is_null() {
28        let _ = brotli::ffi::compressor::BrotliEncoderVersion();
29        let _ = brotli::ffi::decompressor::CBrotliDecoderCreateInstance(None, None, null_mut());
30        let _ = brotli::ffi::decompressor::CBrotliDecoderSetParameter(null_mut(), brotli::ffi::decompressor::ffi::interface::BrotliDecoderParameter::BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION, 0);
31        let _ = brotli::ffi::decompressor::CBrotliDecoderDecompressStream(
32            null_mut(),
33            null_mut(),
34            null_mut(),
35            null_mut(),
36            null_mut(),
37            null_mut(),
38        );
39        std_only_functions();
40        let _ = brotli::ffi::decompressor::CBrotliDecoderMallocU8(null_mut(), 0);
41        let _ = brotli::ffi::decompressor::CBrotliDecoderMallocUsize(null_mut(), 0);
42        let _ = brotli::ffi::decompressor::CBrotliDecoderFreeU8(null_mut(), null_mut(), 0);
43        let _ = brotli::ffi::decompressor::CBrotliDecoderFreeUsize(null_mut(), null_mut(), 0);
44        let _ = brotli::ffi::decompressor::CBrotliDecoderDestroyInstance(null_mut());
45        let _ = brotli::ffi::decompressor::CBrotliDecoderHasMoreOutput(null_mut());
46        let _ = brotli::ffi::decompressor::CBrotliDecoderTakeOutput(null_mut(), null_mut());
47        let _ = brotli::ffi::decompressor::CBrotliDecoderIsUsed(null_mut());
48        let _ = brotli::ffi::decompressor::CBrotliDecoderIsFinished(null_mut());
49        let _ = brotli::ffi::decompressor::CBrotliDecoderGetErrorCode(null_mut());
50        let _ = brotli::ffi::decompressor::CBrotliDecoderGetErrorString(null_mut());
51        let _ = brotli::ffi::decompressor::CBrotliDecoderErrorString(
52            brotli::ffi::decompressor::ffi::BrotliDecoderErrorCode::BROTLI_DECODER_ERROR_UNREACHABLE);
53        let _ = BrotliEncoderCreateInstance(None, None, null_mut());
54        let _ = BrotliEncoderSetParameter(
55            null_mut(),
56            brotli::enc::encode::BrotliEncoderParameter::BROTLI_PARAM_MODE,
57            0,
58        );
59        let _ = BrotliEncoderDestroyInstance(null_mut());
60        let _ = BrotliEncoderIsFinished(null_mut());
61        let _ = BrotliEncoderHasMoreOutput(null_mut());
62        let _ = BrotliEncoderTakeOutput(null_mut(), null_mut());
63        let _ = BrotliEncoderMaxCompressedSize(0);
64        let _ = BrotliEncoderSetCustomDictionary(null_mut(), 0, null_mut());
65        let _ = BrotliEncoderCompress(
66            0,
67            0,
68            BrotliEncoderMode::BROTLI_MODE_GENERIC,
69            0,
70            null_mut(),
71            null_mut(),
72            null_mut(),
73        );
74        let _ = BrotliEncoderCompressStream(
75            null_mut(),
76            BrotliEncoderOperation::BROTLI_OPERATION_FINISH,
77            null_mut(),
78            null_mut(),
79            null_mut(),
80            null_mut(),
81            null_mut(),
82        );
83        let _ = BrotliEncoderMallocU8(null_mut(), 0);
84        let _ = BrotliEncoderFreeU8(null_mut(), null_mut(), 0);
85        let _ = BrotliEncoderMallocUsize(null_mut(), 0);
86        let _ = BrotliEncoderFreeUsize(null_mut(), null_mut(), 0);
87        let _ = BrotliEncoderMaxCompressedSizeMulti(0, 0);
88        let _ = BrotliEncoderCompressMulti(
89            0,
90            null_mut(),
91            null_mut(),
92            0,
93            null_mut(),
94            null_mut(),
95            null_mut(),
96            0,
97            None,
98            None,
99            null_mut(),
100        );
101        let _ = BrotliEncoderCreateWorkPool(0, None, None, null_mut());
102        let _ = BrotliEncoderDestroyWorkPool(null_mut());
103        let _ = BrotliEncoderCompressWorkPool(
104            null_mut(),
105            0,
106            null_mut(),
107            null_mut(),
108            0,
109            null_mut(),
110            null_mut(),
111            null_mut(),
112            0,
113            None,
114            None,
115            null_mut(),
116        );
117    }
118}
119
120#[cfg(not(feature = "std"))]
121#[panic_handler]
122extern "C" fn panic_impl(_: &::core::panic::PanicInfo) -> ! {
123    loop {}
124}
125
126#[cfg(not(feature = "std"))]
127#[lang = "eh_personality"]
128extern "C" fn eh_personality() {}