From 08485648f62b722a2b8a459afb48c3002fa4b106 Mon Sep 17 00:00:00 2001 From: Wildan M Date: Thu, 25 Dec 2025 16:11:36 +0700 Subject: [PATCH] Convert strtold to Rust --- build.rs | 36 --------------------------------- src/c/stdlib.c | 5 ----- src/header/stdlib/cbindgen.toml | 3 +++ src/header/stdlib/mod.rs | 6 +++++- src/lib.rs | 1 + src/platform/types.rs | 1 + 6 files changed, 10 insertions(+), 42 deletions(-) delete mode 100644 build.rs delete mode 100644 src/c/stdlib.c diff --git a/build.rs b/build.rs deleted file mode 100644 index efdfda1143..0000000000 --- a/build.rs +++ /dev/null @@ -1,36 +0,0 @@ -extern crate cc; - -use std::{env, fs}; - -fn get_target() -> String { - env::var("TARGET").unwrap_or( - option_env!("TARGET").map_or("x86_64-unknown-redox".to_string(), |x| x.to_string()), - ) -} - -fn main() { - let _crate_dir = env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR not set"); - let target = get_target(); - - println!("cargo:rerun-if-changed=src/c"); - - let mut cc_builder = &mut cc::Build::new(); - - cc_builder = cc_builder.flag("-nostdinc").flag("-nostdlib"); - - if target.starts_with("aarch64") { - cc_builder = cc_builder.flag("-mno-outline-atomics") - } - - cc_builder - .flag("-fno-stack-protector") - .flag("-Wno-expansion-to-defined") - .files( - fs::read_dir("src/c") - .expect("src/c directory missing") - .map(|res| res.expect("read_dir error").path()), - ) - .compile("relibc_c"); - - println!("cargo:rustc-link-lib=static=relibc_c"); -} diff --git a/src/c/stdlib.c b/src/c/stdlib.c deleted file mode 100644 index 39e4fb0f44..0000000000 --- a/src/c/stdlib.c +++ /dev/null @@ -1,5 +0,0 @@ -double strtod(const char *nptr, char **endptr); - -long double strtold(const char *nptr, char **endptr) { - return (long double)strtod(nptr, endptr); -} diff --git a/src/header/stdlib/cbindgen.toml b/src/header/stdlib/cbindgen.toml index 6e8e15ec25..1aa7267a14 100644 --- a/src/header/stdlib/cbindgen.toml +++ b/src/header/stdlib/cbindgen.toml @@ -6,5 +6,8 @@ style = "Type" no_includes = true cpp_compat = true +[export.rename] +"c_longdouble" = "long double" + [enum] prefix_with_name = true diff --git a/src/header/stdlib/mod.rs b/src/header/stdlib/mod.rs index cef9cdcdd1..6d44636165 100644 --- a/src/header/stdlib/mod.rs +++ b/src/header/stdlib/mod.rs @@ -1479,7 +1479,11 @@ pub unsafe extern "C" fn strtol(s: *const c_char, endptr: *mut *mut c_char, base ) } -// TODO: strtold(), when long double is available +/// See . +#[unsafe(no_mangle)] +pub unsafe extern "C" fn strtold(s: *const c_char, endptr: *mut *mut c_char) -> c_longdouble { + strto_float_impl!(c_longdouble, s, endptr) +} /// See . #[unsafe(no_mangle)] diff --git a/src/lib.rs b/src/lib.rs index 3ea46c6a6b..851dbdf1f6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,6 +16,7 @@ #![feature(asm_const)] #![feature(c_variadic)] #![feature(core_intrinsics)] +#![feature(f128)] #![feature(macro_derive)] #![feature(maybe_uninit_slice)] #![feature(lang_items)] diff --git a/src/platform/types.rs b/src/platform/types.rs index 253f59d94a..e9b10f8f7b 100644 --- a/src/platform/types.rs +++ b/src/platform/types.rs @@ -31,6 +31,7 @@ pub type c_int = i32; pub type c_uint = u32; pub type c_float = f32; pub type c_double = f64; +pub type c_longdouble = f128; pub type c_longlong = i64; pub type c_ulonglong = u64; pub type intmax_t = i64;