From 01081729c83d62ff83950f2a197a73f8ef719b59 Mon Sep 17 00:00:00 2001 From: Dan Robertson <danlrobertson89@gmail.com> Date: Thu, 15 Mar 2018 17:19:58 +0000 Subject: [PATCH] Add structures and stub fns for sys/socket.h Add some of the basic structures and stub functions for sys/socket.h --- Cargo.lock | 9 +++ Cargo.toml | 1 + src/lib.rs | 1 + src/socket/Cargo.toml | 11 +++ src/socket/build.rs | 11 +++ src/socket/cbindgen.toml | 11 +++ src/socket/src/lib.rs | 153 +++++++++++++++++++++++++++++++++++++++ 7 files changed, 197 insertions(+) create mode 100644 src/socket/Cargo.toml create mode 100644 src/socket/build.rs create mode 100644 src/socket/cbindgen.toml create mode 100644 src/socket/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 224eaaa3..4eab6e00 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -263,6 +263,7 @@ dependencies = [ "resource 0.1.0", "semaphore 0.1.0", "signal 0.1.0", + "socket 0.1.0", "stat 0.1.0", "stdio 0.1.0", "stdlib 0.1.0", @@ -351,6 +352,14 @@ dependencies = [ "platform 0.1.0", ] +[[package]] +name = "socket" +version = "0.1.0" +dependencies = [ + "cbindgen 0.5.2", + "platform 0.1.0", +] + [[package]] name = "standalone-quote" version = "0.5.0" diff --git a/Cargo.toml b/Cargo.toml index ffd5eea4..f1481acd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,6 +23,7 @@ platform = { path = "src/platform" } resource = { path = "src/resource" } semaphore = { path = "src/semaphore" } signal = { path = "src/signal" } +socket = { path = "src/socket" } stat = { path = "src/stat" } stdio = { path = "src/stdio" } stdlib = { path = "src/stdlib" } diff --git a/src/lib.rs b/src/lib.rs index b51ef10c..27572f76 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -13,6 +13,7 @@ extern crate grp; extern crate mman; extern crate resource; extern crate semaphore; +extern crate socket; extern crate stat; extern crate stdio; extern crate stdlib; diff --git a/src/socket/Cargo.toml b/src/socket/Cargo.toml new file mode 100644 index 00000000..12801f04 --- /dev/null +++ b/src/socket/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "socket" +version = "0.1.0" +authors = ["Dan Robertson <danlrobertson89@gmail.com>"] +build = "build.rs" + +[build-dependencies] +cbindgen = { path = "../../cbindgen" } + +[dependencies] +platform = { path = "../platform" } diff --git a/src/socket/build.rs b/src/socket/build.rs new file mode 100644 index 00000000..ad891ecb --- /dev/null +++ b/src/socket/build.rs @@ -0,0 +1,11 @@ +extern crate cbindgen; + +use std::{env, fs}; + +fn main() { + let crate_dir = env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR not set"); + fs::create_dir_all("../../target/include").expect("failed to create include directory"); + cbindgen::generate(crate_dir) + .expect("failed to generate bindings") + .write_to_file("../../target/include/sys/socket.h"); +} diff --git a/src/socket/cbindgen.toml b/src/socket/cbindgen.toml new file mode 100644 index 00000000..fc968ead --- /dev/null +++ b/src/socket/cbindgen.toml @@ -0,0 +1,11 @@ +sys_includes = ["sys/types.h"] +include_guard = "_SYS_SOCKET_H" +style = "Tag" +language = "C" + +[defines] +"target_os=linux" = "__linux__" +"target_os=redox" = "__redox__" + +[enum] +prefix_with_name = true diff --git a/src/socket/src/lib.rs b/src/socket/src/lib.rs new file mode 100644 index 00000000..c7c0b5f2 --- /dev/null +++ b/src/socket/src/lib.rs @@ -0,0 +1,153 @@ +//! socket implementation for Redox, following http://pubs.opengroup.org/onlinepubs/7908799/xns/syssocket.h.html + +#![no_std] +#![allow(non_camel_case_types)] + +extern crate platform; + +use platform::types::*; + +pub type sa_family_t = u16; +pub type socklen_t = u32; + +#[repr(C)] +pub struct sockaddr { + pub sa_family: sa_family_t, + pub sa_data: [c_char; 14], +} + +#[no_mangle] +pub unsafe extern "C" fn accept( + socket: c_int, + address: *mut sockaddr, + address_len: *mut socklen_t, +) -> c_int { + unimplemented!(); +} + +#[no_mangle] +pub unsafe extern "C" fn bind( + socket: c_int, + address: *const sockaddr, + address_len: socklen_t, +) -> c_int { + unimplemented!(); +} + +#[no_mangle] +pub unsafe extern "C" fn connect( + socket: c_int, + address: *const sockaddr, + address_len: socklen_t, +) -> c_int { + unimplemented!(); +} + +#[no_mangle] +pub unsafe extern "C" fn getpeername( + socket: c_int, + address: *const sockaddr, + address_len: socklen_t, +) -> c_int { + unimplemented!(); +} + +#[no_mangle] +pub unsafe extern "C" fn getsockname( + socket: c_int, + address: *mut sockaddr, + address_len: *mut socklen_t, +) -> c_int { + unimplemented!(); +} + +#[no_mangle] +pub unsafe extern "C" fn getsockopt( + socket: c_int, + level: c_int, + option_name: c_int, + option_value: *mut c_void, + option_len: *mut socklen_t, +) -> c_int { + unimplemented!(); +} + +#[no_mangle] +pub unsafe extern "C" fn listen(socket: c_int, backlog: c_int) -> c_int { + unimplemented!(); +} + +#[no_mangle] +pub unsafe extern "C" fn recv( + socket: c_int, + buffer: *mut c_void, + length: size_t, + flags: c_int, +) -> ssize_t { + unimplemented!(); +} + +#[no_mangle] +pub unsafe extern "C" fn recvfrom( + socket: c_int, + buffer: *mut c_void, + length: size_t, + flags: c_int, + address: *mut sockaddr, + address_len: *mut socklen_t, +) -> ssize_t { + unimplemented!(); +} + +#[no_mangle] +pub unsafe extern "C" fn send( + socket: c_int, + message: *const c_void, + length: size_t, + flags: c_int, +) -> ssize_t { + unimplemented!(); +} + +#[no_mangle] +pub unsafe extern "C" fn sento( + socket: c_int, + message: *const c_void, + length: size_t, + flags: c_int, + dest_addr: *const sockaddr, + dest_len: socklen_t, +) -> ssize_t { + unimplemented!(); +} + +#[no_mangle] +pub unsafe extern "C" fn setsockopt( + socket: c_int, + level: c_int, + option_name: c_int, + option_value: *const c_void, + option_len: socklen_t, +) -> c_int { + unimplemented!(); +} + +#[no_mangle] +pub unsafe extern "C" fn shutdown(socket: c_int, how: c_int) -> c_int { + unimplemented!(); +} + +#[no_mangle] +pub unsafe extern "C" fn socket(domain: c_int, _type: c_int, protocol: c_int) -> c_int { + unimplemented!(); +} + +#[no_mangle] +pub unsafe extern "C" fn socketpair( + domain: c_int, + _type: c_int, + protocol: c_int, + socket_vector: [c_int; 2], +) -> c_int { + unimplemented!(); +} -- GitLab