Fix Linux custom ioctl opcode computation #861
Merged
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.
When attempting to use the recently added custom ioctl APIs I was getting
Inappropriate ioctl for device
errors and found that the ioctl opcodes being passed to the kernel were equal to just theNUM
part with the other components ignored. This seems to be because the shift and the mask were performed in the wrong order when combining the components.I also added:
linux_raw_sys
as a sanity checkBy the way, I noticed that this library is itself using only
BadOpcode
with constants fromlinux_raw_sys
rather than theReadOpcode
/WriteOpcode
types. Is there any reason to preferReadOpcode
/WriteOpcode
over using an opcode found inlinux_raw_sys
?The name
Bad
made it seem like something I shouldn't be using, but taking the value by name fromlinux_raw_sys
seems less error prone than looking up these components in a C header file and hard-coding them.cc @notgull