Generated
+1
@@ -465,6 +465,7 @@ version = "0.1.0"
|
||||
dependencies = [
|
||||
"cbindgen 0.5.0",
|
||||
"ctype 0.1.0",
|
||||
"errno 0.1.0",
|
||||
"platform 0.1.0",
|
||||
"ralloc 1.0.0",
|
||||
]
|
||||
|
||||
@@ -1,13 +1,9 @@
|
||||
use core::fmt;
|
||||
use core::{fmt, mem, slice, str};
|
||||
|
||||
use platform::types::*;
|
||||
use vl::VaList;
|
||||
|
||||
pub unsafe fn printf<W: fmt::Write>(mut w: W, format: *const c_char, mut ap: VaList) -> c_int {
|
||||
use core::fmt::Write;
|
||||
use core::slice;
|
||||
use core::str;
|
||||
|
||||
extern "C" {
|
||||
fn strlen(s: *const c_char) -> size_t;
|
||||
}
|
||||
@@ -39,6 +35,13 @@ pub unsafe fn printf<W: fmt::Write>(mut w: W, format: *const c_char, mut ap: VaL
|
||||
|
||||
found_percent = false;
|
||||
}
|
||||
'f' | 'F' => {
|
||||
let a = ap.get::<f64>();
|
||||
|
||||
w.write_fmt(format_args!("{}", a));
|
||||
|
||||
found_percent = false;
|
||||
}
|
||||
'n' => {
|
||||
let _a = ap.get::<c_int>();
|
||||
|
||||
|
||||
@@ -11,3 +11,4 @@ cbindgen = { path = "../../cbindgen" }
|
||||
platform = { path = "../platform" }
|
||||
ralloc = { path = "../../ralloc", default-features = false }
|
||||
ctype = { path = "../ctype" }
|
||||
errno = { path = "../errno" }
|
||||
|
||||
+19
-4
@@ -5,9 +5,13 @@
|
||||
#![feature(global_allocator)]
|
||||
|
||||
extern crate ctype;
|
||||
extern crate errno;
|
||||
extern crate platform;
|
||||
extern crate ralloc;
|
||||
|
||||
use core::{ptr, str};
|
||||
|
||||
use errno::*;
|
||||
use platform::types::*;
|
||||
|
||||
#[global_allocator]
|
||||
@@ -52,8 +56,8 @@ pub unsafe extern "C" fn atexit(func: Option<extern "C" fn()>) -> c_int {
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn atof(s: *const c_char) -> c_double {
|
||||
unimplemented!();
|
||||
pub unsafe extern "C" fn atof(s: *const c_char) -> c_double {
|
||||
strtod(s, ptr::null_mut())
|
||||
}
|
||||
|
||||
macro_rules! dec_num_from_ascii {
|
||||
@@ -396,8 +400,19 @@ pub extern "C" fn srandom(seed: c_uint) {
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn strtod(s: *const c_char, endptr: *mut *mut c_char) -> c_double {
|
||||
unimplemented!();
|
||||
pub unsafe extern "C" fn strtod(s: *const c_char, endptr: *mut *mut c_char) -> c_double {
|
||||
//TODO: endptr
|
||||
|
||||
use core::str::FromStr;
|
||||
|
||||
let s_str = str::from_utf8_unchecked(platform::c_str(s));
|
||||
match f64::from_str(s_str) {
|
||||
Ok(ok) => ok as c_double,
|
||||
Err(_err) => {
|
||||
platform::errno = EINVAL;
|
||||
0.0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/alloc
|
||||
/args
|
||||
/atof
|
||||
/atoi
|
||||
/brk
|
||||
/chdir
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
BINS=\
|
||||
alloc \
|
||||
atof \
|
||||
atoi \
|
||||
brk \
|
||||
args \
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
double d = atof("-3.14");
|
||||
printf("%f\n", d);
|
||||
return 0;
|
||||
}
|
||||
+1
-1
Submodule va_list updated: 4762a18450...1945668b2f
Reference in New Issue
Block a user