1
0
Fork 0
forked from wry/wry

all: add musl support

This commit is contained in:
elden 2025-05-08 22:18:08 +03:00 committed by Julian Orth
parent e150c4e748
commit 6341623e72
10 changed files with 65 additions and 35 deletions

View file

@ -6,7 +6,7 @@ use {
sys::{IORING_OP_SENDMSG, io_uring_sqe},
},
time::Time,
utils::{buf::Buf, vec_ext::UninitVecExt},
utils::{buf::Buf, compat::IovLength, vec_ext::UninitVecExt},
},
std::{mem::MaybeUninit, ptr, rc::Rc},
uapi::{OwnedFd, c},
@ -44,11 +44,9 @@ impl IoUring {
st.cmsg.clear();
st.cmsg.reserve(space);
st.cmsg.set_len_safe(space);
let hdr = c::cmsghdr {
cmsg_len: 0,
cmsg_level: c::SOL_SOCKET,
cmsg_type: c::SCM_RIGHTS,
};
let mut hdr: c::cmsghdr = uapi::pod_zeroed();
hdr.cmsg_level = c::SOL_SOCKET;
hdr.cmsg_type = c::SCM_RIGHTS;
uapi::cmsg_write(&mut &mut st.cmsg[..], hdr, &fd_ids[..]).unwrap();
st.msghdr.msg_control = st.cmsg.as_ptr() as _;
st.msghdr.msg_controllen = st.cmsg.len() as _;
@ -66,7 +64,7 @@ impl IoUring {
iov_len: b.len(),
}));
st.msghdr.msg_iov = st.iovecs.as_ptr() as _;
st.msghdr.msg_iovlen = st.iovecs.len();
st.msghdr.msg_iovlen = st.iovecs.len() as IovLength;
st.data = Some(SendmsgTaskData {
_fd: fd.clone(),
res: pr.clone(),

View file

@ -2,7 +2,7 @@ use {
crate::{
allocator::{Allocator, AllocatorError, BufferObject, BufferUsage, MappedBuffer},
format::Format,
utils::{oserror::OsError, page_size::page_size},
utils::{compat::IoctlNumber, oserror::OsError, page_size::page_size},
video::{
LINEAR_MODIFIER, Modifier,
dmabuf::{DmaBuf, DmaBufIds, DmaBufPlane, PlaneVec},
@ -267,4 +267,4 @@ struct udmabuf_create {
size: u64,
}
const UDMABUF_CREATE: u64 = _IOW::<udmabuf_create>(b'u' as u64, 0x42);
const UDMABUF_CREATE: IoctlNumber = _IOW::<udmabuf_create>(b'u' as u64, 0x42) as IoctlNumber;

View file

@ -11,6 +11,7 @@ pub mod bufio;
pub mod cell_ext;
pub mod clone3;
pub mod clonecell;
pub mod compat;
pub mod copyhashmap;
pub mod debug_fn;
pub mod double_buffered;

View file

@ -100,11 +100,9 @@ pub fn double_fork() -> Result<Option<OwnedFd>, ForkerError> {
Forked::Parent { pidfd, .. } => {
let pidfd = pidfd.raw();
let mut buf = [MaybeUninit::uninit(); 128];
let hdr = c::cmsghdr {
cmsg_len: 0,
cmsg_level: c::SOL_SOCKET,
cmsg_type: c::SCM_RIGHTS,
};
let mut hdr: c::cmsghdr = uapi::pod_zeroed();
hdr.cmsg_level = c::SOL_SOCKET;
hdr.cmsg_type = c::SCM_RIGHTS;
let _ = uapi::cmsg_write(&mut &mut buf[..], hdr, &pidfd);
let iov: &[&[u8]] = &[];
let msghdr = Msghdr {

11
src/utils/compat.rs Normal file
View file

@ -0,0 +1,11 @@
use {cfg_if::cfg_if, uapi::c};
cfg_if! {
if #[cfg(target_env = "musl")] {
pub type IoctlNumber = c::c_int;
pub type IovLength = c::c_int;
} else {
pub type IoctlNumber = c::c_ulong;
pub type IovLength = usize;
}
}

View file

@ -1,5 +1,9 @@
use {
crate::{format::Format, utils::oserror::OsError, video::Modifier},
crate::{
format::Format,
utils::{compat::IoctlNumber, oserror::OsError},
video::Modifier,
},
arrayvec::ArrayVec,
std::rc::Rc,
uapi::{_IOW, _IOWR, OwnedFd, c::ioctl},
@ -74,8 +78,10 @@ struct dma_buf_import_sync_file {
pub const DMA_BUF_SYNC_READ: u32 = 1 << 0;
pub const DMA_BUF_SYNC_WRITE: u32 = 1 << 1;
const DMA_BUF_IOCTL_EXPORT_SYNC_FILE: u64 = _IOWR::<dma_buf_export_sync_file>(DMA_BUF_BASE, 2);
const DMA_BUF_IOCTL_IMPORT_SYNC_FILE: u64 = _IOW::<dma_buf_import_sync_file>(DMA_BUF_BASE, 3);
const DMA_BUF_IOCTL_EXPORT_SYNC_FILE: IoctlNumber =
_IOWR::<dma_buf_export_sync_file>(DMA_BUF_BASE, 2) as IoctlNumber;
const DMA_BUF_IOCTL_IMPORT_SYNC_FILE: IoctlNumber =
_IOW::<dma_buf_import_sync_file>(DMA_BUF_BASE, 3) as IoctlNumber;
pub fn dma_buf_export_sync_file(dmabuf: &OwnedFd, flags: u32) -> Result<OwnedFd, OsError> {
let mut data = dma_buf_export_sync_file { flags, fd: -1 };

View file

@ -3,7 +3,7 @@
use {
crate::{
utils::{bitflags::BitflagsExt, oserror::OsError},
utils::{bitflags::BitflagsExt, compat::IoctlNumber, oserror::OsError},
video::drm::{
DrmBlob, DrmCardResources, DrmConnector, DrmConnectorInfo, DrmCrtc, DrmEncoder,
DrmEncoderInfo, DrmError, DrmFb, DrmModeInfo, DrmPlane, DrmPlaneInfo, DrmProperty,
@ -23,7 +23,7 @@ use {
pub unsafe fn ioctl<T>(fd: c::c_int, request: c::c_ulong, t: &mut T) -> Result<c::c_int, OsError> {
let mut ret;
loop {
ret = unsafe { c::ioctl(fd, request, &mut *t) };
ret = unsafe { c::ioctl(fd, request as IoctlNumber, &mut *t) };
if ret != -1 {
return Ok(ret);
}