Add sendmsg stub
This commit is contained in:
@@ -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,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"
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user