#file-format #decompression #mame #data-file #chd

chd-capi

为 CHD 文件格式的 Rust 实现提供的与 libchdr 兼容的 C API

7 个版本

0.3.0 2024 年 2 月 16 日
0.1.5 2022 年 8 月 9 日

#285 in 模拟器

每月 38 次下载

BSD-3-Clause

280KB
5K SLoC

chd-capi

⚠️C API 尚未经过大量测试。使用时请自行承担风险。 ⚠️

chd-rs 提供了一个与 chd.h 兼容的 C API。以下是 ABI 兼容性的详细信息,但作为动态库编译时未经过测试。此包的预期使用方式不是通过 cargo,而是通过将 C API 的源码和适用于您平台的兼容 libchdcorefile 实现作为树的一部分进行 vendoring。

功能

verify_block_crc

启用 chd 包中的 verify_block_crc,以验证使用其内部散列的解压缩 CHD 块。

chd_core_file

启用 core_filechd_open_file,以及 chd_core_file API。此功能需要一个 libchdcorefile 实现或默认的 POSIX 兼容实现(其中 core_fileFILE 流)。

请注意,默认情况下,core_file 不是一个不可见指针,它是一个 C FILE 流。这允许在不违反 chd-rs 的内存安全保证的情况下更改底层文件指针。我们强烈建议使用 chd_open 而不是 chd_open_file

如果您需要 core_file 支持,chd-capi 应该启用 chd_core_file 功能,这将使用 libchdcorefile 中的轻量级包装器将 FILE 包装起来以在 Rust 中使用。如果默认实现不适合,您可能需要自己实现 libchdcorefile。需要 CMake 和 Clang 来使用 chd_core_file 功能。

chd_virtio

启用虚拟I/O功能,函数chd_open_core_file。由于此C API要求core_file是一个不透明指针,因此与libchdr不同,chd_open_filechd_open_core_file之间没有区别,并且chd_open_core_filechd_open_file的别名。所有接受core_file*的函数都需要libchdcorefile实现。

chd_precache

通过chd_precache_progresschd_precache函数启用对底层文件的预加载到内存中。

ABI兼容性

与libchdr相比,当静态编译时,chd-rs提供了以下ABI兼容性保证。

  • chd_errorchd.h兼容
  • chd_headerchd.h兼容
  • chd_file *是一个不透明指针。它与chd.c不兼容
  • 当启用chd_core_file功能时,core_file *的布局由用户定义。
  • 使用free释放chd-rs返回的任何指针是未定义的行为。例外是chd_file *指针,可以使用chd_close安全地释放。

依赖项

~1.7–3.5MB
~64K SLoC