evdev-rs: Enforce proper type for tv_usec / MICROS_PER_SEC #118
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
On sparc64, suseconds_t is of type i32 while tv_sec is of type time_t which itself is of type i64 which causes the build on sparc64 to fail:
error[E0308]: mismatched types
--> src/lib.rs:210:30
|
210 | tv_sec: tv_sec + tv_usec / MICROS_PER_SEC,
| ^^^^^^^^^^^^^^^^^^^^^^^^ expected
i64, foundi32error[E0277]: cannot add
i32toi64--> src/lib.rs:210:28
|
210 | tv_sec: tv_sec + tv_usec / MICROS_PER_SEC,
| ^ no implementation for
i64 + i32|
= help: the trait
Add<i32>is not implemented fori64= help: the following other types implement trait
Add<Rhs>:&i64implementsAdd<i64>&i64implementsAddi64implementsAdd<&i64>i64implementsAddThe type mismatch for suseconds_t is a result of binary compatibility with Solaris and cannot be changed as it's part of the ABI. Since the values for suseconds_t never exceed 32-bit boundaries, it's not really a problem and we can safely cast tv_usec / MICROS_PER_SEC to time_t to fix the build on sparc64.