We're going to update the MSRV to 1.90 soon, and we might as well remove the hacks we have in place from bug 1982939 and bug 1995920 for vendoring backwards compatibility early. Differential Revision: https://phabricator.services.mozilla.com/D279628
encoding_c
encoding_c is an FFI wrapper for encoding_rs.
Bindings for encoding_rs::mem
See the encoding_c_mem crate
for bindings for encoding_rs::mem.
Licensing
Please see the file named COPYRIGHT.
No Unwinding Support!
This crate is meant for use in binaries compiled with panic = 'abort', which
is required for correctness! Unwinding across FFI is Undefined Behavior, and
this crate does nothing to try to prevent unwinding across the FFI if
compiled with unwinding enabled.
C/C++ Headers
include/encoding_rs.h and include/encoding_rs_statics.h are needed for C
usage.
include/encoding_rs_cpp.h is a sample C++ API built on top of the C API using
GSL and the C++ standard library. Since C++ project typically roll their own
string classes, etc., it's probably necessary for C++ projects to manually
adapt the header to their replacements of standard-library types.
There's a write-up about the C++ wrappers.
Release Notes
0.9.8
- Remove year from copyright notices.
0.9.7
- Specify a
linksvalue in the Cargo manifest. - Emit an
include_dirvariable from build script so that other build scripts depending on this crate can rely on it.
0.9.6
- Fix a bug in the C++ header.
0.9.5
- Adjust documentation for encoding_rs 0.8.20.
0.9.4
- Fix bogus C header.
0.9.3
- Fix bogus C++ header.
0.9.2
- Wrap
Decoder::latin1_byte_compatible_up_to.
0.9.1
- Wrap
Encoding::is_single_byte(). - Pass through new feature flags introduced in encoding_rs 0.8.11.
0.9.0
- Update to encoding_rs 0.8.0.
0.8.0
- Update to encoding_rs 0.7.0.
- Drop
encoding_for_name(). - Deal correctly with the
data()method ofgsl::spanreturningnullptr.
0.7.6
- Rename
ENCODING_RS_NON_NULL_CONST_ENCODING_PTRtoENCODING_RS_NOT_NULL_CONST_ENCODING_PTR. (Not a breaking change, because defining that macro broke the build previously, so the macro couldn't have been used.) - Use the macro only for statics and not for return values.
0.7.5
- Annotate the encoding pointers that should be wrapped with a
same-representation not-null type in C++ as
ENCODING_RS_NON_NULL_CONST_ENCODING_PTR.
0.7.4
- Wrap
has_pending_state().
0.7.3
- Use C preprocessor definitions for encoding constant declarations.
0.7.2
- Parametrize the struct type names behind C preprocessor definitions.
- Leave it to the user to provide
char16_t. Avoid including a header for it.
0.7.1
- Fix documentation for pointers that get used in
std::slice::from_raw_parts().
0.7.0
- Map
NonetoSIZE_MAXin the max length calculation functions.
0.6.0
- Check in the
cheddar-generated header and comment out thecheddar-usingbuild.rs.
0.5.0
- Initial release of encoding_c. (I.e. first release with FFI in a distinct crate.)