Bugfixed support for compilation with musl without libfuse present #185
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.
An explanation of the unsafe block:
Musl has a different msghdr structure than glibc. It looks as follows:
The padding fields are necessary due to memory layout, however they are also private, which in conjunction with the lack of constructor means it is impossible to construct a msghdr without resorting to unsafe code. On the other hand the padding guarantees that
[0; size_of::<msghdr>()]
is a valid representation, which is why I resorted to MaybeUninit::zeroed as unsafe constructor.In addition struct update syntax (
msghdr {..MaybeUninit::zeroed()}
) sadly does not work with private fields, so I had to resort to first constructing a zeroed msghdr and then updating the individual fields.