Add sendmsg stub

This commit is contained in:
Jeremy Soller
2024-01-12 15:36:01 -07:00
parent eb3b93d14a
commit 52612784b6
6 changed files with 37 additions and 8 deletions
+1 -3
View File
@@ -16,9 +16,7 @@ fn main() {
let mut cc_builder = &mut cc::Build::new();
cc_builder = cc_builder
.flag("-nostdinc")
.flag("-nostdlib");
cc_builder = cc_builder.flag("-nostdinc").flag("-nostdlib");
if target.starts_with("aarch64") {
cc_builder = cc_builder.flag("-mno-outline-atomics")
+1 -1
View File
@@ -1,4 +1,4 @@
sys_includes = ["stddef.h", "stdint.h", "sys/types.h"]
sys_includes = ["stddef.h", "stdint.h", "sys/types.h", "sys/uio.h"]
include_guard = "_SYS_SOCKET_H"
trailer = "#include <bits/sys/socket.h>"
language = "C"
+20 -1
View File
@@ -2,13 +2,27 @@
use core::ptr;
use crate::platform::{types::*, PalSocket, Sys};
use crate::{
header::sys_uio::iovec,
platform::{types::*, PalSocket, Sys},
};
pub mod constants;
pub type sa_family_t = u16;
pub type socklen_t = u32;
#[repr(C)]
pub struct msghdr {
pub msg_name: *mut c_void,
pub msg_namelen: socklen_t,
pub msg_iov: *mut iovec,
pub msg_iovlen: size_t,
pub msg_control: *mut c_void,
pub msg_controllen: size_t,
pub msg_flags: c_int,
}
#[repr(C)]
#[derive(Default)]
pub struct sockaddr {
@@ -163,6 +177,11 @@ pub unsafe extern "C" fn send(
sendto(socket, message, length, flags, ptr::null(), 0)
}
#[no_mangle]
pub unsafe extern "C" fn sendmsg(socket: c_int, msg: *const msghdr, flags: c_int) -> ssize_t {
Sys::sendmsg(socket, msg, flags)
}
#[no_mangle]
pub unsafe extern "C" fn sendto(
socket: c_int,
+5 -1
View File
@@ -2,7 +2,7 @@ use super::{
super::{types::*, PalSocket},
e, Sys,
};
use crate::header::sys_socket::{sockaddr, socklen_t};
use crate::header::sys_socket::{msghdr, sockaddr, socklen_t};
impl PalSocket for Sys {
unsafe fn accept(socket: c_int, address: *mut sockaddr, address_len: *mut socklen_t) -> c_int {
@@ -75,6 +75,10 @@ impl PalSocket for Sys {
)) as ssize_t
}
unsafe fn sendmsg(socket: c_int, msg: *const msghdr, flags: c_int) -> ssize_t {
e(syscall!(SENDMSG, socket, msg, flags)) as ssize_t
}
unsafe fn sendto(
socket: c_int,
buf: *const c_void,
+3 -1
View File
@@ -1,5 +1,5 @@
use super::super::{types::*, Pal};
use crate::header::sys_socket::{sockaddr, socklen_t};
use crate::header::sys_socket::{msghdr, sockaddr, socklen_t};
pub trait PalSocket: Pal {
unsafe fn accept(socket: c_int, address: *mut sockaddr, address_len: *mut socklen_t) -> c_int;
@@ -39,6 +39,8 @@ pub trait PalSocket: Pal {
address_len: *mut socklen_t,
) -> ssize_t;
unsafe fn sendmsg(socket: c_int, msg: *const msghdr, flags: c_int) -> ssize_t;
unsafe fn sendto(
socket: c_int,
buf: *const c_void,
+7 -1
View File
@@ -10,7 +10,7 @@ use crate::header::{
arpa_inet::inet_aton,
netinet_in::{in_addr, in_port_t, sockaddr_in},
string::strnlen,
sys_socket::{constants::*, sa_family_t, sockaddr, socklen_t},
sys_socket::{constants::*, msghdr, sa_family_t, sockaddr, socklen_t},
sys_time::timeval,
sys_un::sockaddr_un,
};
@@ -316,6 +316,12 @@ impl PalSocket for Sys {
}
}
unsafe fn sendmsg(socket: c_int, msg: *const msghdr, flags: c_int) -> ssize_t {
eprintln!("sendmsg not implemented on redox");
errno = syscall::ENOSYS;
return -1;
}
unsafe fn sendto(
socket: c_int,
buf: *const c_void,