mirror of
https://github.com/fluencelabs/wasmer
synced 2025-06-22 13:11:32 +00:00
Updated imports required for jq. Added get_str method in VarArgs
This commit is contained in:
17
lib/emscripten/src/env/mod.rs
vendored
17
lib/emscripten/src/env/mod.rs
vendored
@ -112,3 +112,20 @@ pub fn ___assert_fail(_ctx: &mut Ctx, _a: c_int, _b: c_int, _c: c_int, _d: c_int
|
|||||||
// TODO: Implement like emscripten expects regarding memory/page size
|
// TODO: Implement like emscripten expects regarding memory/page size
|
||||||
// TODO raise an error
|
// TODO raise an error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn _fpathconf(_ctx: &mut Ctx, _fildes: c_int, name: c_int) -> c_int {
|
||||||
|
debug!("emscripten::_fpathconf {} {}", _fildes, name);
|
||||||
|
match name {
|
||||||
|
0 => 32000,
|
||||||
|
1 | 2 | 3 => 255,
|
||||||
|
4 | 5 | 16 | 17 | 18 => 4096,
|
||||||
|
6 | 7 | 20 => 1,
|
||||||
|
8 => 0,
|
||||||
|
9 | 10 | 11 | 12 | 14 | 15 | 19 => -1,
|
||||||
|
13 => 64,
|
||||||
|
_ => {
|
||||||
|
// ___setErrNo(22);
|
||||||
|
-1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -547,6 +547,8 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject
|
|||||||
"_sysconf" => func!(crate::env::_sysconf),
|
"_sysconf" => func!(crate::env::_sysconf),
|
||||||
"_getaddrinfo" => func!(crate::env::_getaddrinfo),
|
"_getaddrinfo" => func!(crate::env::_getaddrinfo),
|
||||||
"_times" => func!(crate::env::_times),
|
"_times" => func!(crate::env::_times),
|
||||||
|
"_pathconf" => func!(crate::env::_fpathconf),
|
||||||
|
"_fpathconf" => func!(crate::env::_fpathconf),
|
||||||
|
|
||||||
// Syscalls
|
// Syscalls
|
||||||
"___syscall1" => func!(crate::syscalls::___syscall1),
|
"___syscall1" => func!(crate::syscalls::___syscall1),
|
||||||
@ -689,6 +691,7 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject
|
|||||||
"_asctime_r" => func!(crate::time::_asctime_r),
|
"_asctime_r" => func!(crate::time::_asctime_r),
|
||||||
"_localtime" => func!(crate::time::_localtime),
|
"_localtime" => func!(crate::time::_localtime),
|
||||||
"_time" => func!(crate::time::_time),
|
"_time" => func!(crate::time::_time),
|
||||||
|
"_timegm" => func!(crate::time::_timegm),
|
||||||
"_strftime" => func!(crate::time::_strftime),
|
"_strftime" => func!(crate::time::_strftime),
|
||||||
"_strftime_l" => func!(crate::time::_strftime_l),
|
"_strftime_l" => func!(crate::time::_strftime_l),
|
||||||
"_localtime_r" => func!(crate::time::_localtime_r),
|
"_localtime_r" => func!(crate::time::_localtime_r),
|
||||||
@ -707,6 +710,7 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject
|
|||||||
"_llvm_exp2_f32" => func!(crate::math::_llvm_exp2_f32),
|
"_llvm_exp2_f32" => func!(crate::math::_llvm_exp2_f32),
|
||||||
"_llvm_exp2_f64" => func!(crate::math::_llvm_exp2_f64),
|
"_llvm_exp2_f64" => func!(crate::math::_llvm_exp2_f64),
|
||||||
"_llvm_trunc_f64" => func!(crate::math::_llvm_trunc_f64),
|
"_llvm_trunc_f64" => func!(crate::math::_llvm_trunc_f64),
|
||||||
|
"_llvm_fma_f64" => func!(crate::math::_llvm_fma_f64),
|
||||||
"_emscripten_random" => func!(crate::math::_emscripten_random),
|
"_emscripten_random" => func!(crate::math::_emscripten_random),
|
||||||
|
|
||||||
// Jump
|
// Jump
|
||||||
|
@ -49,6 +49,11 @@ pub fn _llvm_trunc_f64(_ctx: &mut Ctx, value: f64) -> f64 {
|
|||||||
value.trunc()
|
value.trunc()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn _llvm_fma_f64(_ctx: &mut Ctx, value: f64, a: f64, b: f64) -> f64 {
|
||||||
|
debug!("emscripten::_llvm_fma_f64");
|
||||||
|
value.mul_add(a, b)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn _emscripten_random(_ctx: &mut Ctx) -> f64 {
|
pub fn _emscripten_random(_ctx: &mut Ctx) -> f64 {
|
||||||
debug!("emscripten::_emscripten_random");
|
debug!("emscripten::_emscripten_random");
|
||||||
-1.0
|
-1.0
|
||||||
|
@ -38,6 +38,7 @@ use libc::{
|
|||||||
// writev,
|
// writev,
|
||||||
stat,
|
stat,
|
||||||
write,
|
write,
|
||||||
|
// readlink,
|
||||||
};
|
};
|
||||||
use wasmer_runtime_core::vm::Ctx;
|
use wasmer_runtime_core::vm::Ctx;
|
||||||
|
|
||||||
@ -93,9 +94,8 @@ pub fn ___syscall6(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int
|
|||||||
// chdir
|
// chdir
|
||||||
pub fn ___syscall12(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int {
|
pub fn ___syscall12(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int {
|
||||||
debug!("emscripten::___syscall12 (chdir) {}", _which);
|
debug!("emscripten::___syscall12 (chdir) {}", _which);
|
||||||
let path_addr: i32 = varargs.get(ctx);
|
let path_ptr = varargs.get_str(ctx);
|
||||||
unsafe {
|
unsafe {
|
||||||
let path_ptr = emscripten_memory_pointer!(ctx.memory(0), path_addr) as *const i8;
|
|
||||||
let _path = std::ffi::CStr::from_ptr(path_ptr);
|
let _path = std::ffi::CStr::from_ptr(path_ptr);
|
||||||
let ret = chdir(path_ptr);
|
let ret = chdir(path_ptr);
|
||||||
debug!("=> path: {:?}, ret: {}", _path, ret);
|
debug!("=> path: {:?}, ret: {}", _path, ret);
|
||||||
@ -122,10 +122,8 @@ pub fn ___syscall20(_ctx: &mut Ctx, _one: i32, _two: i32) -> i32 {
|
|||||||
// rename
|
// rename
|
||||||
pub fn ___syscall38(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> i32 {
|
pub fn ___syscall38(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> i32 {
|
||||||
debug!("emscripten::___syscall38 (rename)");
|
debug!("emscripten::___syscall38 (rename)");
|
||||||
let old_path_addr: u32 = varargs.get(ctx);
|
let old_path = varargs.get_str(ctx);
|
||||||
let new_path_addr: u32 = varargs.get(ctx);
|
let new_path = varargs.get_str(ctx);
|
||||||
let old_path = emscripten_memory_pointer!(ctx.memory(0), old_path_addr) as *const i8;
|
|
||||||
let new_path = emscripten_memory_pointer!(ctx.memory(0), new_path_addr) as *const i8;
|
|
||||||
let result = unsafe { rename(old_path, new_path) };
|
let result = unsafe { rename(old_path, new_path) };
|
||||||
debug!(
|
debug!(
|
||||||
"=> old_path: {}, new_path: {}, result: {}",
|
"=> old_path: {}, new_path: {}, result: {}",
|
||||||
@ -139,8 +137,7 @@ pub fn ___syscall38(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> i32 {
|
|||||||
// rmdir
|
// rmdir
|
||||||
pub fn ___syscall40(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int {
|
pub fn ___syscall40(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int {
|
||||||
debug!("emscripten::___syscall40 (rmdir)");
|
debug!("emscripten::___syscall40 (rmdir)");
|
||||||
let pathname: u32 = varargs.get(ctx);
|
let pathname_addr = varargs.get_str(ctx);
|
||||||
let pathname_addr = emscripten_memory_pointer!(ctx.memory(0), pathname) as *const i8;
|
|
||||||
unsafe { rmdir(pathname_addr) }
|
unsafe { rmdir(pathname_addr) }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -201,9 +198,30 @@ pub fn ___syscall75(_ctx: &mut Ctx, _one: i32, _two: i32) -> i32 {
|
|||||||
-1
|
-1
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn ___syscall85(_ctx: &mut Ctx, _one: i32, _two: i32) -> i32 {
|
// readlink
|
||||||
debug!("emscripten::___syscall85");
|
pub fn ___syscall85(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> i32 {
|
||||||
-1
|
debug!("emscripten::___syscall85 (readlink)");
|
||||||
|
let _path = varargs.get_str(ctx);
|
||||||
|
let buf = varargs.get_str(ctx);
|
||||||
|
// let buf_addr: i32 = varargs.get(ctx);
|
||||||
|
let buf_size: i32 = varargs.get(ctx);
|
||||||
|
|
||||||
|
let fd = 3;
|
||||||
|
let ret = unsafe { read(fd, buf as _, buf_size as _) as i32 };
|
||||||
|
debug!("=> buf: {}, buf_size: {}, return: {} ", unsafe { std::ffi::CStr::from_ptr(buf as _).to_str().unwrap() }, buf_size, ret);
|
||||||
|
|
||||||
|
// let ret = unsafe {
|
||||||
|
// readlink(path, buf as _, buf_size as _) as i32
|
||||||
|
// };
|
||||||
|
// debug!("=> path: {}, buf: {}, buf_size: {}, return: {} ",
|
||||||
|
// unsafe { std::ffi::CStr::from_ptr(path).to_str().unwrap() },
|
||||||
|
// unsafe { std::ffi::CStr::from_ptr(buf as _).to_str().unwrap() },
|
||||||
|
// // std::ffi::CStr::from_ptr(buf).to_str().unwrap(),
|
||||||
|
// // buf,
|
||||||
|
// buf_size,
|
||||||
|
// ret);
|
||||||
|
|
||||||
|
ret
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn ___syscall91(_ctx: &mut Ctx, _one: i32, _two: i32) -> i32 {
|
pub fn ___syscall91(_ctx: &mut Ctx, _one: i32, _two: i32) -> i32 {
|
||||||
@ -397,19 +415,16 @@ pub fn ___syscall199(_ctx: &mut Ctx, _one: i32, _two: i32) -> i32 {
|
|||||||
// stat64
|
// stat64
|
||||||
pub fn ___syscall195(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int {
|
pub fn ___syscall195(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int {
|
||||||
debug!("emscripten::___syscall195 (stat64) {}", _which);
|
debug!("emscripten::___syscall195 (stat64) {}", _which);
|
||||||
let pathname: u32 = varargs.get(ctx);
|
let pathname_addr = varargs.get_str(ctx);
|
||||||
let buf: u32 = varargs.get(ctx);
|
let buf: u32 = varargs.get(ctx);
|
||||||
|
|
||||||
let pathname_addr = emscripten_memory_pointer!(ctx.memory(0), pathname) as *const i8;
|
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
let mut _stat: stat = std::mem::zeroed();
|
let mut _stat: stat = std::mem::zeroed();
|
||||||
let ret = stat(pathname_addr, &mut _stat);
|
let ret = stat(pathname_addr, &mut _stat);
|
||||||
debug!(
|
debug!(
|
||||||
"=> pathname: {}, buf: {}, path: {} = {}\nlast os error: {}",
|
"=> pathname: {}, buf: {} = {}, last os error: {}",
|
||||||
pathname,
|
|
||||||
buf,
|
|
||||||
std::ffi::CStr::from_ptr(pathname_addr).to_str().unwrap(),
|
std::ffi::CStr::from_ptr(pathname_addr).to_str().unwrap(),
|
||||||
|
buf,
|
||||||
ret,
|
ret,
|
||||||
Error::last_os_error()
|
Error::last_os_error()
|
||||||
);
|
);
|
||||||
|
@ -104,19 +104,17 @@ const SO_NOSIGPIPE: c_int = 0;
|
|||||||
/// open
|
/// open
|
||||||
pub fn ___syscall5(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int {
|
pub fn ___syscall5(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int {
|
||||||
debug!("emscripten::___syscall5 (open) {}", _which);
|
debug!("emscripten::___syscall5 (open) {}", _which);
|
||||||
let pathname: u32 = varargs.get(ctx);
|
let pathname_addr = varargs.get_str(ctx);
|
||||||
let flags: i32 = varargs.get(ctx);
|
let flags: i32 = varargs.get(ctx);
|
||||||
let mode: u32 = varargs.get(ctx);
|
let mode: u32 = varargs.get(ctx);
|
||||||
let pathname_addr = emscripten_memory_pointer!(ctx.memory(0), pathname) as *const i8;
|
|
||||||
let _path_str = unsafe { std::ffi::CStr::from_ptr(pathname_addr).to_str().unwrap() };
|
let _path_str = unsafe { std::ffi::CStr::from_ptr(pathname_addr).to_str().unwrap() };
|
||||||
let fd = unsafe { open(pathname_addr, flags, mode) };
|
let fd = unsafe { open(pathname_addr, flags, mode) };
|
||||||
debug!(
|
debug!(
|
||||||
"=> pathname: {}, flags: {}, mode: {} = fd: {}\npath: {}\nlast os error: {}",
|
"=> path: {}, flags: {}, mode: {} = fd: {}, last os error: {}",
|
||||||
pathname,
|
_path_str,
|
||||||
flags,
|
flags,
|
||||||
mode,
|
mode,
|
||||||
fd,
|
fd,
|
||||||
_path_str,
|
|
||||||
Error::last_os_error(),
|
Error::last_os_error(),
|
||||||
);
|
);
|
||||||
fd
|
fd
|
||||||
@ -126,10 +124,8 @@ pub fn ___syscall5(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int
|
|||||||
pub fn ___syscall9(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int {
|
pub fn ___syscall9(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int {
|
||||||
debug!("emscripten::___syscall9 (link) {}", _which);
|
debug!("emscripten::___syscall9 (link) {}", _which);
|
||||||
|
|
||||||
let oldname: c_int = varargs.get(ctx);
|
let oldname_ptr = varargs.get_str(ctx);
|
||||||
let newname: c_int = varargs.get(ctx);
|
let newname_ptr = varargs.get_str(ctx);
|
||||||
let oldname_ptr = emscripten_memory_pointer!(ctx.memory(0), oldname) as *const i8;
|
|
||||||
let newname_ptr = emscripten_memory_pointer!(ctx.memory(0), newname) as *const i8;
|
|
||||||
let result = unsafe { link(oldname_ptr, newname_ptr) };
|
let result = unsafe { link(oldname_ptr, newname_ptr) };
|
||||||
debug!(
|
debug!(
|
||||||
"=> oldname: {}, newname: {}, result: {}",
|
"=> oldname: {}, newname: {}, result: {}",
|
||||||
@ -156,10 +152,8 @@ pub fn ___syscall77(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int
|
|||||||
pub fn ___syscall83(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int {
|
pub fn ___syscall83(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int {
|
||||||
debug!("emscripten::___syscall83 (symlink) {}", _which);
|
debug!("emscripten::___syscall83 (symlink) {}", _which);
|
||||||
|
|
||||||
let path1_ptr: c_int = varargs.get(ctx);
|
let path1 = varargs.get_str(ctx);
|
||||||
let path2_ptr: c_int = varargs.get(ctx);
|
let path2 = varargs.get_str(ctx);
|
||||||
let path1 = emscripten_memory_pointer!(ctx.memory(0), path1_ptr) as *mut i8;
|
|
||||||
let path2 = emscripten_memory_pointer!(ctx.memory(0), path2_ptr) as *mut i8;
|
|
||||||
let result = unsafe { symlink(path1, path2) };
|
let result = unsafe { symlink(path1, path2) };
|
||||||
debug!(
|
debug!(
|
||||||
"=> path1: {}, path2: {}, result: {}",
|
"=> path1: {}, path2: {}, result: {}",
|
||||||
@ -186,10 +180,9 @@ pub fn ___syscall194(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_in
|
|||||||
/// lchown
|
/// lchown
|
||||||
pub fn ___syscall198(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int {
|
pub fn ___syscall198(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int {
|
||||||
debug!("emscripten::___syscall198 (lchown) {}", _which);
|
debug!("emscripten::___syscall198 (lchown) {}", _which);
|
||||||
let path: c_int = varargs.get(ctx);
|
let path_ptr = varargs.get_str(ctx);
|
||||||
let uid: uid_t = varargs.get(ctx);
|
let uid: uid_t = varargs.get(ctx);
|
||||||
let gid: gid_t = varargs.get(ctx);
|
let gid: gid_t = varargs.get(ctx);
|
||||||
let path_ptr = emscripten_memory_pointer!(ctx.memory(0), path) as *const i8;
|
|
||||||
let result = unsafe { lchown(path_ptr, uid, gid) };
|
let result = unsafe { lchown(path_ptr, uid, gid) };
|
||||||
debug!(
|
debug!(
|
||||||
"=> path: {}, uid: {}, gid: {}, result: {}",
|
"=> path: {}, uid: {}, gid: {}, result: {}",
|
||||||
@ -222,12 +215,10 @@ pub fn ___syscall205(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_in
|
|||||||
pub fn ___syscall212(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int {
|
pub fn ___syscall212(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int {
|
||||||
debug!("emscripten::___syscall212 (chown) {}", _which);
|
debug!("emscripten::___syscall212 (chown) {}", _which);
|
||||||
|
|
||||||
let pathname: u32 = varargs.get(ctx);
|
let pathname_addr = varargs.get_str(ctx);
|
||||||
let owner: u32 = varargs.get(ctx);
|
let owner: u32 = varargs.get(ctx);
|
||||||
let group: u32 = varargs.get(ctx);
|
let group: u32 = varargs.get(ctx);
|
||||||
|
|
||||||
let pathname_addr = emscripten_memory_pointer!(ctx.memory(0), pathname) as *const i8;
|
|
||||||
|
|
||||||
unsafe { chown(pathname_addr, owner, group) }
|
unsafe { chown(pathname_addr, owner, group) }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -247,9 +238,8 @@ pub fn ___syscall219(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_in
|
|||||||
/// access
|
/// access
|
||||||
pub fn ___syscall33(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int {
|
pub fn ___syscall33(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int {
|
||||||
debug!("emscripten::___syscall33 (access) {}", _which);
|
debug!("emscripten::___syscall33 (access) {}", _which);
|
||||||
let path_ptr: c_int = varargs.get(ctx);
|
let path = varargs.get_str(ctx);
|
||||||
let amode: c_int = varargs.get(ctx);
|
let amode: c_int = varargs.get(ctx);
|
||||||
let path = emscripten_memory_pointer!(ctx.memory(0), path_ptr) as *const i8;
|
|
||||||
let result = unsafe { access(path, amode) };
|
let result = unsafe { access(path, amode) };
|
||||||
debug!(
|
debug!(
|
||||||
"=> path: {}, amode: {}, result: {}",
|
"=> path: {}, amode: {}, result: {}",
|
||||||
@ -270,9 +260,8 @@ pub fn ___syscall34(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int
|
|||||||
// mkdir
|
// mkdir
|
||||||
pub fn ___syscall39(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int {
|
pub fn ___syscall39(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int {
|
||||||
debug!("emscripten::___syscall39 (mkdir) {}", _which);
|
debug!("emscripten::___syscall39 (mkdir) {}", _which);
|
||||||
let pathname: u32 = varargs.get(ctx);
|
let pathname_addr = varargs.get_str(ctx);
|
||||||
let mode: u32 = varargs.get(ctx);
|
let mode: u32 = varargs.get(ctx);
|
||||||
let pathname_addr = emscripten_memory_pointer!(ctx.memory(0), pathname) as *const i8;
|
|
||||||
unsafe { mkdir(pathname_addr, mode as _) }
|
unsafe { mkdir(pathname_addr, mode as _) }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -771,9 +760,8 @@ pub fn ___syscall122(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_in
|
|||||||
/// lstat64
|
/// lstat64
|
||||||
pub fn ___syscall196(ctx: &mut Ctx, _which: i32, mut varargs: VarArgs) -> i32 {
|
pub fn ___syscall196(ctx: &mut Ctx, _which: i32, mut varargs: VarArgs) -> i32 {
|
||||||
debug!("emscripten::___syscall196 (lstat64) {}", _which);
|
debug!("emscripten::___syscall196 (lstat64) {}", _which);
|
||||||
let path_ptr: c_int = varargs.get(ctx);
|
let path = varargs.get_str(ctx);
|
||||||
let buf_ptr: u32 = varargs.get(ctx);
|
let buf_ptr: u32 = varargs.get(ctx);
|
||||||
let path = emscripten_memory_pointer!(ctx.memory(0), path_ptr) as *const i8;
|
|
||||||
unsafe {
|
unsafe {
|
||||||
let mut stat: stat = std::mem::zeroed();
|
let mut stat: stat = std::mem::zeroed();
|
||||||
|
|
||||||
|
@ -18,10 +18,9 @@ pub fn ___syscall5(ctx: &mut Ctx, which: c_int, mut varargs: VarArgs) -> c_int {
|
|||||||
debug!("emscripten::___syscall5 (open) {}", which);
|
debug!("emscripten::___syscall5 (open) {}", which);
|
||||||
#[cfg(not(feature = "debug"))]
|
#[cfg(not(feature = "debug"))]
|
||||||
let _ = which;
|
let _ = which;
|
||||||
let pathname: u32 = varargs.get(ctx);
|
let pathname_addr = varargs.get_str(ctx);
|
||||||
let flags: i32 = varargs.get(ctx);
|
let flags: i32 = varargs.get(ctx);
|
||||||
let mode: u32 = varargs.get(ctx);
|
let mode: u32 = varargs.get(ctx);
|
||||||
let pathname_addr = emscripten_memory_pointer!(ctx.memory(0), pathname) as *const i8;
|
|
||||||
let path_str = unsafe { std::ffi::CStr::from_ptr(pathname_addr).to_str().unwrap() };
|
let path_str = unsafe { std::ffi::CStr::from_ptr(pathname_addr).to_str().unwrap() };
|
||||||
match path_str {
|
match path_str {
|
||||||
"/dev/urandom" => {
|
"/dev/urandom" => {
|
||||||
@ -43,7 +42,7 @@ pub fn ___syscall5(ctx: &mut Ctx, which: c_int, mut varargs: VarArgs) -> c_int {
|
|||||||
let fd = unsafe { open(raw_pointer_to_urandom_file, flags, mode) };
|
let fd = unsafe { open(raw_pointer_to_urandom_file, flags, mode) };
|
||||||
debug!(
|
debug!(
|
||||||
"=> pathname: {}, flags: {}, mode: {} = fd: {}",
|
"=> pathname: {}, flags: {}, mode: {} = fd: {}",
|
||||||
pathname, flags, mode, fd
|
path_str, flags, mode, fd
|
||||||
);
|
);
|
||||||
fd
|
fd
|
||||||
}
|
}
|
||||||
@ -51,7 +50,7 @@ pub fn ___syscall5(ctx: &mut Ctx, which: c_int, mut varargs: VarArgs) -> c_int {
|
|||||||
let fd = unsafe { open(pathname_addr, flags, mode) };
|
let fd = unsafe { open(pathname_addr, flags, mode) };
|
||||||
debug!(
|
debug!(
|
||||||
"=> pathname: {}, flags: {}, mode: {} = fd: {}\npath: {}",
|
"=> pathname: {}, flags: {}, mode: {} = fd: {}\npath: {}",
|
||||||
pathname, flags, mode, fd, path_str
|
path_str, flags, mode, fd, path_str
|
||||||
);
|
);
|
||||||
fd
|
fd
|
||||||
}
|
}
|
||||||
@ -95,8 +94,7 @@ pub fn ___syscall39(ctx: &mut Ctx, which: c_int, mut varargs: VarArgs) -> c_int
|
|||||||
debug!("emscripten::___syscall39 (mkdir) {}", which);
|
debug!("emscripten::___syscall39 (mkdir) {}", which);
|
||||||
#[cfg(not(feature = "debug"))]
|
#[cfg(not(feature = "debug"))]
|
||||||
let _ = which;
|
let _ = which;
|
||||||
let pathname: u32 = varargs.get(ctx);
|
let pathname_addr = varargs.get_str(ctx);
|
||||||
let pathname_addr = emscripten_memory_pointer!(ctx.memory(0), pathname) as *const i8;
|
|
||||||
unsafe { mkdir(pathname_addr) }
|
unsafe { mkdir(pathname_addr) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ use std::mem;
|
|||||||
use std::time::SystemTime;
|
use std::time::SystemTime;
|
||||||
|
|
||||||
#[cfg(not(target_os = "windows"))]
|
#[cfg(not(target_os = "windows"))]
|
||||||
use libc::{clockid_t, time as libc_time};
|
use libc::{clockid_t, time as libc_time, timegm as libc_timegm};
|
||||||
|
|
||||||
#[cfg(target_os = "windows")]
|
#[cfg(target_os = "windows")]
|
||||||
use libc::time_t;
|
use libc::time_t;
|
||||||
@ -17,6 +17,8 @@ type clockid_t = c_int;
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#[link_name = "time"]
|
#[link_name = "time"]
|
||||||
pub fn libc_time(s: *const time_t) -> time_t;
|
pub fn libc_time(s: *const time_t) -> time_t;
|
||||||
|
#[link_name = "timegm"]
|
||||||
|
pub fn libc_timegm(s: *const time_t) -> time_t;
|
||||||
}
|
}
|
||||||
|
|
||||||
use time;
|
use time;
|
||||||
@ -298,6 +300,16 @@ pub fn _time(ctx: &mut Ctx, time_p: u32) -> i32 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// emscripten: _timegm
|
||||||
|
pub fn _timegm(ctx: &mut Ctx, time_ptr: u32) -> i32 {
|
||||||
|
debug!("emscripten::_timegm {}", time_ptr);
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
let time_p_addr = emscripten_memory_pointer!(ctx.memory(0), time_ptr) as *mut guest_tm;
|
||||||
|
libc_timegm(time_p_addr as _) as i32 // TODO review i64
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// emscripten: _strftime
|
/// emscripten: _strftime
|
||||||
pub fn _strftime(
|
pub fn _strftime(
|
||||||
ctx: &mut Ctx,
|
ctx: &mut Ctx,
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
use std::mem;
|
use std::mem;
|
||||||
use wasmer_runtime_core::{types::WasmExternType, vm::Ctx};
|
use wasmer_runtime_core::{types::WasmExternType, vm::Ctx};
|
||||||
|
// use std::ffi::CStr;
|
||||||
|
use std::os::raw::c_char;
|
||||||
|
|
||||||
#[repr(transparent)]
|
#[repr(transparent)]
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
@ -13,6 +15,14 @@ impl VarArgs {
|
|||||||
self.pointer += mem::size_of::<T>() as u32;
|
self.pointer += mem::size_of::<T>() as u32;
|
||||||
unsafe { (ptr as *const T).read() }
|
unsafe { (ptr as *const T).read() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// pub fn getStr<'a>(&mut self, ctx: &mut Ctx) -> &'a CStr {
|
||||||
|
pub fn get_str(&mut self, ctx: &mut Ctx) -> *const c_char {
|
||||||
|
let ptr_addr: u32 = self.get(ctx);
|
||||||
|
let ptr = emscripten_memory_pointer!(ctx.memory(0), ptr_addr) as *const c_char;
|
||||||
|
ptr
|
||||||
|
// unsafe { CStr::from_ptr(ptr) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe impl WasmExternType for VarArgs {
|
unsafe impl WasmExternType for VarArgs {
|
||||||
|
Reference in New Issue
Block a user