Commit Graph
98 Commits
Author SHA1 Message Date
Oliver Hamlet 5aa61abc10 Remove pelite dependency
The advantages of using the built-in implementation instead of pelite are:

- It's much faster on average: for Starfield.exe (~ 100 MB) it is 2.8x
  faster and 4% slower reading file and product versions respectively,
  and for sfse_1_15_222.dll it is 3.35x faster and < 1% slower
  respectively.
- It reduces the transitive dependency count by 8
- It uses ~ 700 lines of first-party code that only depends on the
  standard library, instead of 240715 lines of unaudited third-party code
- pelite hasn't had a release in 3 years, and my PR for replacing winapi
  hasn't had any response in the month and a half it's been open, so the
  built-in implementation is probably less of a maintenance risk.
2025-12-03 18:39:27 +00:00
Oliver Hamlet daf229c1e9 Implement PE executable version parsing
Using only the standard library (i.e. without pelite).

This commit keeps the pelite dependency and uses it to check that the
new parser gives the same result. The next commit will remove pelite.

I've verified that both parsers give the same result for the following
files that are referenced in the masterlists' version conditions:

Starfield.exe
sfse_1_15_222.dll
SkyrimSE.exe
skse64_loader.exe
skseVR_loader.exe
ENBHelperSE.dll
d3d11.dll
EngineFixes.dll
QuickLootEE.dll
FalloutNV.exe
nvse_1_4.dll
nvse_1_4ng.dll
nvse_1_1.dll
Fallout3.exe
fose_1_7.dll
fose_1_7ng.dll
nvac.dll
Fallout4.exe
f4se_loader.exe
f4sevr_loader.exe
place.dll
obse_1_2_416.dll
TESV.exe
skse_loader.exe

The only referenced files that I couldn't test against were SkyrimVR.exe
and Fallout4VR.exe, because I don't own those games.
2025-12-03 18:39:27 +00:00
Oliver Hamlet 99f03bbade Update cargo-vet config 2025-12-03 18:11:53 +00:00
Oliver Hamlet c8625a0851 Add audits for regex 1.11.3 -> 1.12.2 delta 2025-11-24 22:26:02 +00:00
Oliver Hamlet 2047429754 Replace use of taiki-e/install-action
The action updates very frequently with irrelevant changes (for other things it can install), making it more of a review burden than it's worth.
2025-11-24 20:32:21 +00:00
Oliver Hamlet c7bd60cb74 Fix new clippy warning
It seems to have been introduced in Rust v1.91.0.
2025-11-10 18:33:49 +00:00
Oliver Hamlet 67dfd78017 Explicitly limit permissions in CI jobs 2025-10-31 21:48:59 +00:00
Oliver Hamlet 966bf75a29 Add audits for regex v1.11.2 to v1.11.3 update 2025-10-03 18:39:36 +01:00
Oliver Hamlet 6a66d8fcd0 Add audit for esplugin v6.1.4 as workaround for trust 2025-10-03 18:18:52 +01:00
Oliver Hamlet a88f424219 Update libc entry in cargo-vet lockfile 2025-10-03 18:02:03 +01:00
Oliver Hamlet 4a1fe296ed Check the hashes of files downloaded in CI 2025-10-02 17:40:16 +01:00
Oliver Hamlet 26b3f2f152 Use Dependabot to keep Actions up to date 2025-10-01 20:11:36 +01:00
Oliver Hamlet bd10075c72 Pin third-party Action versions
The versions that are installed have not changed: the hashes correspond to the current values of the version tags that were previously used.
2025-10-01 20:08:54 +01:00
Oliver Hamlet b8bb06581d Install cargo-vet using a Git commit hash
The hash doubles as a checksum of the code that's downloaded and built. Installing from crates.io doesn't provide equivalent functionality.
2025-10-01 20:06:08 +01:00
Oliver Hamlet a5cb37f203 Install cbindgen using a Git commit hash
The hash doubles as a checksum of the code that's downloaded and built. Installing from crates.io doesn't provide equivalent functionality.
2025-10-01 20:01:52 +01:00
Oliver Hamlet 8cfe561712 Pass ---locked to cargo install 2025-10-01 19:58:01 +01:00
Oliver Hamlet b1a0840690 Update versions and changelog for v5.3.3 2025-09-29 17:19:59 +01:00
Oliver Hamlet 2ac9a9e374 Add a CI job to run cargo vet 2025-09-28 16:27:40 +01:00
Oliver Hamlet bdeeaee9e9 Use more permissive dependency version selectors
So that dependents have more freedom in choosing versions in their dependency tree.

I've run the tests using the oldest versions allowed by the new specifiers, and they all pass.

The current release of esplugin unnecessarily requires at least unicase v2.8.1, but with that fixed, unicase v2.0.0 is fine.
2025-09-28 16:26:13 +01:00
Oliver Hamlet 940aa22f26 Update errno, rustix, winapi-util, windows-sys
To remove several windows* crates.
2025-09-28 16:26:13 +01:00
Oliver Hamlet a3fab8f8c7 Downgrade crossbeam-deque to an audited version
The differences don't seem to be significant for LCI's usage.
2025-09-28 16:26:13 +01:00
Oliver Hamlet 7469c7ba41 Downgrade walkdir to an audited version
The differences don't seem to be significant for LCI's usage.
2025-09-28 16:26:13 +01:00
Oliver Hamlet e1ad153df2 Downgrade ryu to an audited version
The differences don't seem to be significant for LCI's usage.
2025-09-28 16:26:13 +01:00
Oliver Hamlet 185dd20834 Downgrade syn to an audited version
The differences don't seem to be significant for LCI's usage.
2025-09-28 16:26:13 +01:00
Oliver Hamlet c9e9cef47f Add cargo-vet config 2025-09-28 16:26:13 +01:00
Oliver Hamlet d70bbdd2c9 Fix new clippy lint error
Introduced in Rust 1.89.0 / clippy 0.1.89.
2025-08-20 17:26:17 +01:00
Oliver Hamlet a87b6d95cc Don't fail the CI job if Coveralls is down 2025-08-20 17:26:17 +01:00
Oliver Hamlet 616f0ed144 Check coverage in Windows CI builds 2025-08-20 17:26:17 +01:00
Oliver Hamlet 7358c180c5 Use --workspace instead of deprecated --all 2025-08-01 18:07:36 +01:00
Oliver Hamlet 5f9d15b2c9 Move lints config to Cargo config 2025-08-01 18:07:36 +01:00
Oliver Hamlet e075010fbd Deduplicate Cargo package fields 2025-08-01 18:07:33 +01:00
Oliver Hamlet a2d90d781a Fix repository in Cargo.toml 2025-08-01 18:07:24 +01:00
Oliver Hamlet c65270891e Fix CI badge in readme 2025-08-01 17:37:38 +01:00
Oliver Hamlet 93dd69a2c8 Add a release GitHub Actions workflow
For publishing to crates.io.
2025-08-01 17:37:25 +01:00
Oliver Hamlet 36a987f0b5 Fix clippy warnings 2025-07-20 11:33:26 +01:00
Oliver Hamlet 3c81bd50e2 Update Windows CI to windows-2025
windows-2019 will be fully retired by the end of June, and 2025 is the latest version.
2025-04-29 22:27:19 +01:00
Oliver Hamlet cacf19c54f Update versions and changelog for v5.3.2 2025-04-28 18:18:29 +01:00
Oliver Hamlet 8a5cf6d124 Update transitive dependencies 2025-04-28 18:18:28 +01:00
Oliver Hamlet 5131b31df4 Update to esplugin 6.1.3 2025-04-28 18:16:39 +01:00
Oliver Hamlet 6415ac9511 Write paths in errors as escaped ASCII text 2025-04-28 17:48:53 +01:00
Oliver Hamlet b45ace0700 Improve FFI error message handling 2025-04-28 17:48:20 +01:00
Oliver Hamlet dbbbcd58e5 Remove check that paths are inside game path
It didn't work correctly for OpenMW or for additional data paths, fixing it would be significantly more complicated, and it doesn't really add any value.
2025-04-27 18:37:40 +01:00
Oliver Hamlet 50d9d11b6b Update metadata syntax version in readme 2025-04-27 07:23:35 +01:00
Oliver Hamlet 2e89521963 Fix description_contains for OpenMW plugins 2025-04-27 07:23:35 +01:00
Oliver Hamlet 2b37e15f2b Run clippy in CI 2025-04-27 07:23:34 +01:00
Oliver Hamlet 9c4f9dcb5e Deny a lot of extra lints and fix their errors 2025-04-26 10:10:48 +01:00
Oliver Hamlet 733d14cd4c Fix Display output for ComparisonOperator::NotEqual 2025-04-26 00:09:26 +01:00
Oliver Hamlet a574a2c98b Fix compiling for platforms that don't have memory map support in pelite 2025-04-25 18:51:29 +01:00
Oliver Hamlet 332a636bf1 Update versions and changelog for v5.3.1 2025-03-26 18:41:24 +00:00
Oliver Hamlet 638c233815 Add description and repository metadata to Cargo.toml 2025-03-26 18:33:57 +00:00
Oliver Hamlet 906198e599 Update versions and changelog for v5.3.0 2025-03-26 18:11:37 +00:00
Oliver Hamlet 537718766b Recover from poisoning of internal cache locks
Since they only contain cached values, it's reasonable to overwrite the
value with a new empty map and go from there.

This doesn't affect the lock used in the FFI layer because that protects
caller-provided state, and it doesn't change the function return types
to avoid breaking backwards compatibility.
2025-03-26 18:11:37 +00:00
Oliver Hamlet f7d9947fa4 Add Send, Sync and 'static bounds to Error variant 2025-02-26 19:45:59 +00:00
Oliver Hamlet 08749f51ad Add more derived traits to enums and structs 2025-02-26 19:45:33 +00:00
Oliver Hamlet da95554781 Update versions and changelog for v5.2.0 2025-02-20 17:48:23 +00:00
Oliver Hamlet f8cc7de5f8 Support line breaks in condition string whitespace 2025-02-20 17:47:55 +00:00
Oliver Hamlet f7ba01a46b Update versions and changelog for v5.1.0 2025-02-16 09:13:51 +00:00
Oliver Hamlet 2367403cad Use correct dir order for OpenMW when evaluating dir entries
I don't think this actually matters since evaluation just returns true and only exits early on success, but if the evaluator has side effects then it could matter.
2025-02-16 09:13:51 +00:00
Oliver Hamlet 174ba55c95 Add description_contains() condition function
It evaluates to true if the plugin description contains text that matches the given regex.
2025-02-15 22:38:18 +00:00
Oliver Hamlet f84083da52 Add filename_version() condition function
Unlike the other functions it will always evaluate to false if the version cannot be extracted from any filenames.
2025-02-15 21:27:39 +00:00
Oliver Hamlet 30e3ed9c86 Add file_size() function
It evaluates to false if the file doesn't exist.
2025-02-15 18:28:39 +00:00
Oliver Hamlet bae9e8b630 Update versions and changelog for v5.0.0 2025-02-01 18:56:44 +00:00
Oliver Hamlet d3da4528d3 Recognise OpenMW .omwscripts plugins
This doesn't really have any effect, as since ghosting is disabled for OpenMW the extension is only checked when evaluating a version() function, and .omwscripts plugins don't have a version field, so there's no reason for that version() call to exist in the first place.
2025-02-01 18:56:44 +00:00
Oliver Hamlet 7bf005118e Don't treat any OpenMW plugin as a master
Master-flagged plugins are not forced to load before other plugins in OpenMW.
2025-02-01 18:33:30 +00:00
Oliver Hamlet d7f5455cd0 Swap out some libc type aliases with std::ffi equivalents
Unfortunately std::ffi::c_size_t is currently experimental, and if I
define c_size_t = usize myself then cbindgen doesn't recognise it
properly and makes c_size_t a typedef of uintptr_t instead of just
replacing it with size_t.
2025-02-01 17:58:12 +00:00
Oliver Hamlet d9c453a857 Use c_int instead of i32 in error types
To match the types used by the actual error mappers. c_int is a type alias of i32 on the platforms that this library is used on, so there's no practical difference.
2025-02-01 17:58:12 +00:00
Oliver Hamlet 000c9971c2 Improve running CMake in CI 2025-01-29 18:38:32 +00:00
Oliver Hamlet 08639a1e8f Fix path handling for OpenMW
- Disable support for plugin ghosting for OpenMW, it's not clear if it's useful and it increases complexity.
- Search additional data paths in reverse order.
2025-01-29 18:38:32 +00:00
Oliver Hamlet a8f9a5734a Make Error and GameType enums non-exhaustive
So that it's not a breaking change to add more variants in the future.
2025-01-29 18:38:24 +00:00
Oliver Hamlet 9e2aa0cf9c Add support for OpenMW .omwaddon and .omwgame plugins 2025-01-29 18:38:24 +00:00
Oliver Hamlet f357fa48a3 Add is_executable() function
To guard against calling product_version() or version() on (non-plugin) files that unexpectedly aren't executables, e.g. Starfield.exe from the Microsoft Store.
2025-01-28 18:17:57 +00:00
Oliver Hamlet 784af50540 Update nom from 7.1.3 to 8.0.0 2025-01-27 20:06:23 +00:00
Oliver Hamlet 18150b76c1 Make integration test a unit test
I don't know why I implemented it as an integration test.
2025-01-19 14:03:10 +00:00
Oliver Hamlet 94d663bd4e Force-install cbindgen in CI 2025-01-14 18:21:20 +00:00
Oliver Hamlet 3d9ac4cfc2 Address clippy warnings in test code 2025-01-14 18:12:31 +00:00
Oliver Hamlet eb48d09283 Apply clippy --fix changes 2025-01-14 18:12:14 +00:00
Oliver Hamlet 13600ba188 Apply clippy suggestion 2025-01-14 18:11:47 +00:00
Oliver Hamlet deb8d39800 Migrate to the ubuntu-24.04 GitHub Actions runner
The ubuntu-20.04 runner is due to be deprecated on 2025-02-01 and
unsupported by 2025-04-01.

The ubuntu-24.04 runner doesn't include cbindgen so install it using
apt.
2025-01-13 20:39:59 +00:00
Oliver Hamlet 6b793f25bd Update versions and changelog for v4.0.2 2024-10-08 10:15:17 +01:00
Oliver Hamlet 317dd58d0d Update versions and changelog for v4.0.1 2024-06-28 17:49:22 +01:00
Oliver Hamlet b2fa93f134 Refactor CI workflow 2024-06-28 17:44:52 +01:00
Oliver Hamlet 54f9541c34 Update esplugin to 6.0.0 2024-06-28 17:25:47 +01:00
Oliver Hamlet 458841ce45 Update version numbers and changelog for v4.0.0 2024-05-02 20:54:56 +01:00
Oliver Hamlet c21391568c Add context to Error::ParsingIncomplete 2024-05-02 20:54:56 +01:00
Oliver Hamlet 848747e07c Update dependencies 2024-05-02 20:30:47 +01:00
Oliver Hamlet 97f366f7b9 Update esplugin to v5.0.1 2024-05-02 20:29:07 +01:00
Oliver Hamlet df88090a5d Update to Rust's 2021 edition
This means that the winapi sub-dependency is built with fewer features.
2024-05-02 19:55:52 +01:00
Oliver Hamlet c508533d4b Remove the ffi-headers feature
Rely on a separate cbindgen instance instead, which is less self-contained but more practical.
2024-04-30 23:29:31 +01:00
Oliver Hamlet adeac2317c Update GitHub Actions
To address deprecation warnings.
2024-04-30 22:58:41 +01:00
Oliver Hamlet 3af0ac5773 Commit Cargo.lock
This will allow deterministic builds in CI and is now the recommended approach (and cargo new no longer adds it to .gitignore).
2024-04-30 22:45:59 +01:00
Oliver Hamlet 922a8f9e7d Update version numbers and changelog for v3.1.0 2023-09-05 18:49:13 +01:00
Oliver Hamlet 30c140eb4d Add support for Starfield
As far as loot-condition-interpreter is concerned, it's not really any
different from Fallout 4.
2023-09-05 18:48:44 +01:00
Oliver Hamlet d8af231b99 Fix only lowercase plugin extensions being recognised
.esp, .esm, .esl and those plus .ghost suffixes are now matched
case-insensitively.
2023-08-26 09:43:29 +01:00
Oliver Hamlet 1043c21572 Update version numbers and changelog for v3.0.0 2023-08-18 17:39:24 +01:00
Oliver Hamlet 04ee63b5cf Fix benchmarks 2023-08-18 17:28:00 +01:00
Oliver Hamlet 86fee1892e Remove support for the "LOOT" alias 2023-08-17 23:39:26 +01:00
Oliver Hamlet 2b95f26727 Fix Windows FFI build
Looks like the Rust standard library now links against ntdll too.
2023-06-25 14:22:52 +01:00
Oliver Hamlet 3f05d6ad8a Update links to testing-plugins repo 2023-06-25 14:03:03 +01:00