Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add missing PS Vita definitions, fix some unused ones #3284

Merged
merged 2 commits into from Sep 24, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
30 changes: 19 additions & 11 deletions src/unix/mod.rs
Expand Up @@ -678,17 +678,6 @@ extern "C" {
value: *const ::c_void,
option_len: socklen_t,
) -> ::c_int;
#[cfg_attr(
all(target_os = "macos", target_arch = "x86"),
link_name = "socketpair$UNIX2003"
)]
#[cfg_attr(target_os = "illumos", link_name = "__xnet_socketpair")]
pub fn socketpair(
domain: ::c_int,
type_: ::c_int,
protocol: ::c_int,
socket_vector: *mut ::c_int,
) -> ::c_int;
#[cfg(not(all(
libc_cfg_target_vendor,
target_arch = "powerpc",
Expand Down Expand Up @@ -1412,6 +1401,25 @@ extern "C" {
pub fn lockf(fd: ::c_int, cmd: ::c_int, len: ::off_t) -> ::c_int;

}

cfg_if! {
if #[cfg(not(target_os = "vita"))] {
extern "C" {
#[cfg_attr(
all(target_os = "macos", target_arch = "x86"),
link_name = "socketpair$UNIX2003"
)]
#[cfg_attr(target_os = "illumos", link_name = "__xnet_socketpair")]
pub fn socketpair(
domain: ::c_int,
type_: ::c_int,
protocol: ::c_int,
socket_vector: *mut ::c_int,
) -> ::c_int;
}
}
}

cfg_if! {
if #[cfg(not(any(target_os = "emscripten",
target_os = "android",
Expand Down
2 changes: 1 addition & 1 deletion src/unix/newlib/aarch64/mod.rs
Expand Up @@ -51,4 +51,4 @@ pub const MSG_WAITALL: ::c_int = 0;
pub const MSG_MORE: ::c_int = 0;
pub const MSG_NOSIGNAL: ::c_int = 0;

pub use crate::unix::newlib::generic::{sigset_t, stat};
pub use crate::unix::newlib::generic::{dirent, sigset_t, stat};
2 changes: 1 addition & 1 deletion src/unix/newlib/arm/mod.rs
Expand Up @@ -53,4 +53,4 @@ pub const MSG_WAITALL: ::c_int = 0;
pub const MSG_MORE: ::c_int = 0;
pub const MSG_NOSIGNAL: ::c_int = 0;

pub use crate::unix::newlib::generic::{sigset_t, stat};
pub use crate::unix::newlib::generic::{dirent, sigset_t, stat};
2 changes: 1 addition & 1 deletion src/unix/newlib/espidf/mod.rs
Expand Up @@ -107,4 +107,4 @@ extern "C" {
pub fn eventfd(initval: ::c_uint, flags: ::c_int) -> ::c_int;
}

pub use crate::unix::newlib::generic::{sigset_t, stat};
pub use crate::unix::newlib::generic::{dirent, sigset_t, stat};
6 changes: 6 additions & 0 deletions src/unix/newlib/generic.rs
Expand Up @@ -24,4 +24,10 @@ s! {
pub st_blocks: ::blkcnt_t,
pub st_spare4: [::c_long; 2usize],
}

pub struct dirent {
pub d_ino: ::ino_t,
pub d_type: ::c_uchar,
pub d_name: [::c_char; 256usize],
}
}
2 changes: 2 additions & 0 deletions src/unix/newlib/horizon/mod.rs
Expand Up @@ -266,3 +266,5 @@ extern "C" {

pub fn gethostid() -> ::c_long;
}

pub use crate::unix::newlib::generic::dirent;
63 changes: 36 additions & 27 deletions src/unix/newlib/mod.rs
@@ -1,13 +1,7 @@
pub type blkcnt_t = i32;
pub type blksize_t = i32;

cfg_if! {
if #[cfg(target_os = "vita")] {
pub type clockid_t = ::c_uint;
} else {
pub type clockid_t = ::c_ulong;
}
}
pub type clockid_t = ::c_ulong;

cfg_if! {
if #[cfg(any(target_os = "espidf"))] {
Expand Down Expand Up @@ -170,16 +164,6 @@ s! {
pub sa_flags: ::c_int,
}

pub struct dirent {
#[cfg(not(target_os = "vita"))]
pub d_ino: ino_t,
#[cfg(not(target_os = "vita"))]
pub d_type: ::c_uchar,
#[cfg(target_os = "vita")]
__offset: [u8; 88],
pub d_name: [::c_char; 256usize],
}

pub struct stack_t {
pub ss_sp: *mut ::c_void,
pub ss_flags: ::c_int,
Expand Down Expand Up @@ -546,8 +530,16 @@ pub const IFF_LINK2: ::c_int = 0x4000; // per link layer defined bit
pub const IFF_ALTPHYS: ::c_int = IFF_LINK2; // use alternate physical connection
pub const IFF_MULTICAST: ::c_int = 0x8000; // supports multicast

pub const TCP_NODELAY: ::c_int = 8193;
pub const TCP_MAXSEG: ::c_int = 8194;
cfg_if! {
if #[cfg(target_os = "vita")] {
pub const TCP_NODELAY: ::c_int = 1;
pub const TCP_MAXSEG: ::c_int = 2;
} else {
pub const TCP_NODELAY: ::c_int = 8193;
pub const TCP_MAXSEG: ::c_int = 8194;
}
}

pub const TCP_NOPUSH: ::c_int = 4;
pub const TCP_NOOPT: ::c_int = 8;
pub const TCP_KEEPIDLE: ::c_int = 256;
Expand All @@ -561,13 +553,25 @@ cfg_if! {
pub const IP_TOS: ::c_int = 3;
}
}
pub const IP_TTL: ::c_int = 8;
cfg_if! {
if #[cfg(target_os = "vita")] {
pub const IP_TTL: ::c_int = 4;
} else {
pub const IP_TTL: ::c_int = 8;
}
}
pub const IP_MULTICAST_IF: ::c_int = 9;
pub const IP_MULTICAST_TTL: ::c_int = 10;
pub const IP_MULTICAST_LOOP: ::c_int = 11;
pub const IP_ADD_MEMBERSHIP: ::c_int = 11;
pub const IP_DROP_MEMBERSHIP: ::c_int = 12;

cfg_if! {
if #[cfg(target_os = "vita")] {
pub const IP_ADD_MEMBERSHIP: ::c_int = 12;
pub const IP_DROP_MEMBERSHIP: ::c_int = 13;
} else {
pub const IP_ADD_MEMBERSHIP: ::c_int = 11;
pub const IP_DROP_MEMBERSHIP: ::c_int = 12;
}
}
pub const IPV6_UNICAST_HOPS: ::c_int = 4;
pub const IPV6_MULTICAST_IF: ::c_int = 9;
pub const IPV6_MULTICAST_HOPS: ::c_int = 10;
Expand Down Expand Up @@ -598,10 +602,15 @@ pub const NI_NAMEREQD: ::c_int = 4;
pub const NI_NUMERICSERV: ::c_int = 0;
pub const NI_DGRAM: ::c_int = 0;

pub const EAI_FAMILY: ::c_int = -303;
pub const EAI_MEMORY: ::c_int = -304;
pub const EAI_NONAME: ::c_int = -305;
pub const EAI_SOCKTYPE: ::c_int = -307;
cfg_if! {
// Defined in vita/mod.rs for "vita"
if #[cfg(not(target_os = "vita"))] {
pub const EAI_FAMILY: ::c_int = -303;
pub const EAI_MEMORY: ::c_int = -304;
pub const EAI_NONAME: ::c_int = -305;
pub const EAI_SOCKTYPE: ::c_int = -307;
}
}

pub const EXIT_SUCCESS: ::c_int = 0;
pub const EXIT_FAILURE: ::c_int = 1;
Expand Down
2 changes: 1 addition & 1 deletion src/unix/newlib/powerpc/mod.rs
Expand Up @@ -5,7 +5,7 @@ pub type wchar_t = ::c_int;
pub type c_long = i32;
pub type c_ulong = u32;

pub use crate::unix::newlib::generic::{sigset_t, stat};
pub use crate::unix::newlib::generic::{dirent, sigset_t, stat};

// the newlib shipped with devkitPPC does not support the following components:
// - sockaddr
Expand Down
35 changes: 33 additions & 2 deletions src/unix/newlib/vita/mod.rs
Expand Up @@ -9,6 +9,16 @@ pub type c_ulong = u32;
pub type sigset_t = ::c_ulong;

s! {
pub struct msghdr {
pub msg_name: *mut ::c_void,
pub msg_namelen: ::socklen_t,
pub msg_iov: *mut ::iovec,
pub msg_iovlen: ::c_int,
pub msg_control: *mut ::c_void,
pub msg_controllen: ::socklen_t,
pub msg_flags: ::c_int,
}

pub struct sockaddr {
pub sa_len: u8,
pub sa_family: ::sa_family_t,
Expand All @@ -35,16 +45,17 @@ s! {
}

pub struct sockaddr_un {
pub ss_len: u8,
pub sun_family: ::sa_family_t,
pub sun_path: [::c_char; 108usize],
}

pub struct sockaddr_storage {
pub ss_len: u8,
pub ss_family: ::sa_family_t,
pub __ss_pad1: [u8; 4],
pub __ss_pad1: [u8; 2],
pub __ss_align: i64,
pub __ss_pad2: [u8; 4],
pub __ss_pad2: [u8; 116],
}

pub struct sched_param {
Expand All @@ -67,16 +78,31 @@ s! {
pub st_blocks: ::blkcnt_t,
pub st_spare4: [::c_long; 2usize],
}

#[repr(align(8))]
pub struct dirent {
__offset: [u8; 88],
pub d_name: [::c_char; 256usize],
__pad: [u8; 8],
}
}

pub const AF_UNIX: ::c_int = 1;
pub const AF_INET6: ::c_int = 24;

pub const SOCK_RAW: ::c_int = 3;
pub const SOCK_RDM: ::c_int = 4;
pub const SOCK_SEQPACKET: ::c_int = 5;

pub const FIONBIO: ::c_ulong = 1;

pub const POLLIN: ::c_short = 0x0001;
pub const POLLPRI: ::c_short = POLLIN;
pub const POLLOUT: ::c_short = 0x0004;
pub const POLLRDNORM: ::c_short = POLLIN;
pub const POLLRDBAND: ::c_short = POLLIN;
pub const POLLWRNORM: ::c_short = POLLOUT;
pub const POLLWRBAND: ::c_short = POLLOUT;
pub const POLLERR: ::c_short = 0x0008;
pub const POLLHUP: ::c_short = 0x0010;
pub const POLLNVAL: ::c_short = 0x0020;
Expand Down Expand Up @@ -141,11 +167,16 @@ pub const _SC_PAGESIZE: ::c_int = 8;
pub const _SC_GETPW_R_SIZE_MAX: ::c_int = 51;
pub const PTHREAD_STACK_MIN: ::size_t = 32 * 1024;

pub const IP_HDRINCL: ::c_int = 2;

extern "C" {
pub fn futimens(fd: ::c_int, times: *const ::timespec) -> ::c_int;
pub fn writev(fd: ::c_int, iov: *const ::iovec, iovcnt: ::c_int) -> ::ssize_t;
pub fn readv(fd: ::c_int, iov: *const ::iovec, iovcnt: ::c_int) -> ::ssize_t;

pub fn sendmsg(s: ::c_int, msg: *const ::msghdr, flags: ::c_int) -> ::ssize_t;
pub fn recvmsg(s: ::c_int, msg: *mut ::msghdr, flags: ::c_int) -> ::ssize_t;

pub fn pthread_create(
native: *mut ::pthread_t,
attr: *const ::pthread_attr_t,
Expand Down