Browse Source

float: Add crate for float.h

Add a crate with stubbed functions for the float.h header.
Dan Robertson 7 years ago
parent
commit
3699b53ba2
7 changed files with 64 additions and 1 deletions
  1. 10 1
      Cargo.lock
  2. 1 0
      Cargo.toml
  3. 6 0
      include/bits/float.h
  4. 11 0
      src/float/Cargo.toml
  5. 11 0
      src/float/build.rs
  6. 6 0
      src/float/cbindgen.toml
  7. 19 0
      src/float/src/lib.rs

+ 10 - 1
Cargo.lock

@@ -102,7 +102,15 @@ version = "0.1.0"
 dependencies = [
  "cbindgen 0.5.0",
  "platform 0.1.0",
- "resource 0.1.0",
+]
+
+[[package]]
+name = "float"
+version = "0.1.0"
+dependencies = [
+ "cbindgen 0.5.0",
+ "fenv 0.1.0",
+ "platform 0.1.0",
 ]
 
 [[package]]
@@ -264,6 +272,7 @@ dependencies = [
  "errno 0.1.0",
  "fcntl 0.1.0",
  "fenv 0.1.0",
+ "float 0.1.0",
  "grp 0.1.0",
  "mman 0.1.0",
  "platform 0.1.0",

+ 1 - 0
Cargo.toml

@@ -16,6 +16,7 @@ ctype = { path = "src/ctype" }
 errno = { path = "src/errno" }
 fcntl = { path = "src/fcntl" }
 fenv = { path = "src/fenv" }
+float = { path = "src/float" }
 grp = { path = "src/grp" }
 semaphore = { path = "src/semaphore" }
 mman = { path = "src/mman" }

+ 6 - 0
include/bits/float.h

@@ -0,0 +1,6 @@
+#ifndef _BITS_FLOAT_H
+#define _BITS_FLOAT_H
+
+#define FLT_ROUNDS (flt_rounds())
+
+#endif

+ 11 - 0
src/float/Cargo.toml

@@ -0,0 +1,11 @@
+[package]
+name = "float"
+version = "0.1.0"
+authors = ["Dan Robertson <danlrobertson89@gmail.com>"]
+
+[build-dependencies]
+cbindgen = { path = "../../cbindgen" }
+
+[dependencies]
+platform = { path = "../platform" }
+fenv = { path = "../fenv" }

+ 11 - 0
src/float/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/float.h");
+}

+ 6 - 0
src/float/cbindgen.toml

@@ -0,0 +1,6 @@
+sys_includes = ["sys/types.h", "bits/float.h"]
+include_guard = "_FLOAT_H"
+language = "C"
+
+[enum]
+prefix_with_name = true

+ 19 - 0
src/float/src/lib.rs

@@ -0,0 +1,19 @@
+//! float.h implementation for Redox, following
+//! http://pubs.opengroup.org/onlinepubs/7908799/xsh/float.h.html
+
+#![no_std]
+
+extern crate fenv;
+extern crate platform;
+
+use platform::types::*;
+use fenv::{fegetround, FE_TONEAREST};
+
+pub const FLT_RADIX: c_int = 2;
+
+pub unsafe extern "C" fn flt_rounds() -> c_int {
+    match fegetround() {
+        FE_TONEAREST => 1,
+        _ => -1,
+    }
+}