131 lines
3.3 KiB
Markdown
131 lines
3.3 KiB
Markdown
# encoding_c
|
|
|
|
[](https://crates.io/crates/encoding_c)
|
|
[](https://docs.rs/encoding_c/)
|
|
[](https://github.com/hsivonen/encoding_c/blob/master/COPYRIGHT)
|
|
|
|
encoding_c is an FFI wrapper for [encoding_rs](https://github.com/hsivonen/encoding_rs).
|
|
|
|
## Bindings for `encoding_rs::mem`
|
|
|
|
See the [`encoding_c_mem` crate](https://crates.io/crates/encoding_c_mem)
|
|
for bindings for `encoding_rs::mem`.
|
|
|
|
## Licensing
|
|
|
|
Please see the file named
|
|
[COPYRIGHT](https://github.com/hsivonen/encoding_c/blob/master/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](https://hsivonen.fi/modern-cpp-in-rust/) about the C++
|
|
wrappers.
|
|
|
|
## Release Notes
|
|
|
|
### 0.9.8
|
|
|
|
* Remove year from copyright notices.
|
|
|
|
### 0.9.7
|
|
|
|
* Specify a `links` value in the Cargo manifest.
|
|
* Emit an `include_dir` variable 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 of `gsl::span` returning `nullptr`.
|
|
|
|
### 0.7.6
|
|
|
|
* Rename `ENCODING_RS_NON_NULL_CONST_ENCODING_PTR` to
|
|
`ENCODING_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 `None` to `SIZE_MAX` in the max length calculation functions.
|
|
|
|
### 0.6.0
|
|
|
|
* Check in the `cheddar`-generated header and comment out the `cheddar`-using
|
|
`build.rs`.
|
|
|
|
### 0.5.0
|
|
|
|
* Initial release of encoding_c. (I.e. first release with FFI in a distinct
|
|
crate.)
|
|
|