19 releases

Uses old Rust 2015

0.9.8 May 13, 2020
0.9.7 Oct 21, 2019
0.9.5 Sep 16, 2019
0.9.1 Nov 16, 2018
0.6.0 Feb 27, 2017

#1014 in Encoding

Download history 684/week @ 2023-12-13 1048/week @ 2023-12-20 804/week @ 2023-12-27 1251/week @ 2024-01-03 1034/week @ 2024-01-10 1249/week @ 2024-01-17 1487/week @ 2024-01-24 1069/week @ 2024-01-31 1485/week @ 2024-02-07 1375/week @ 2024-02-14 1350/week @ 2024-02-21 2742/week @ 2024-02-28 2730/week @ 2024-03-06 2748/week @ 2024-03-13 2880/week @ 2024-03-20 2030/week @ 2024-03-27

10,740 downloads per month

Apache-2.0 OR MIT

53KB
518 lines

encoding_c

docs.rs Apache 2 / MIT dual-licensed

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 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.)

Dependencies

~3.5MB
~120K SLoC