Make Python running 🎉

This commit is contained in:
Syrus
2019-06-13 14:05:57 +02:00
parent 58d75868f4
commit 8829e1d901
2 changed files with 42 additions and 6 deletions

View File

@ -1,4 +1,7 @@
use libc::{chroot as _chroot, printf as _printf};
use std::mem;
use libc::{chroot as _chroot, printf as _printf, getpwuid as _getpwuid};
use super::super::utils::copy_cstr_into_wasm;
use super::super::env::call_malloc;
use wasmer_runtime_core::vm::Ctx;
@ -24,7 +27,36 @@ pub fn chroot(ctx: &mut Ctx, name_ptr: i32) -> i32 {
}
/// getpwuid
pub fn getpwuid(_ctx: &mut Ctx, _uid: i32) -> i32 {
debug!("emscripten::getpwuid");
0
pub fn getpwuid(ctx: &mut Ctx, uid: i32) -> i32 {
debug!("emscripten::getpwuid {}", uid);
#[repr(C)]
struct GuestPasswd {
pw_name: u32,
pw_passwd: u32,
pw_uid: u32,
pw_gid: u32,
pw_gecos: u32,
pw_dir: u32,
pw_shell: u32,
}
unsafe {
let passwd = &*_getpwuid(uid as _);
let passwd_struct_offset = call_malloc(ctx, mem::size_of::<GuestPasswd>() as _);
let passwd_struct_ptr =
emscripten_memory_pointer!(ctx.memory(0), passwd_struct_offset) as *mut GuestPasswd;
(*passwd_struct_ptr).pw_name = copy_cstr_into_wasm(ctx, passwd.pw_name);
(*passwd_struct_ptr).pw_passwd = copy_cstr_into_wasm(ctx, passwd.pw_passwd);
(*passwd_struct_ptr).pw_gecos = copy_cstr_into_wasm(ctx, passwd.pw_gecos);
(*passwd_struct_ptr).pw_dir = copy_cstr_into_wasm(ctx, passwd.pw_dir);
(*passwd_struct_ptr).pw_shell = copy_cstr_into_wasm(ctx, passwd.pw_shell);
(*passwd_struct_ptr).pw_uid = passwd.pw_uid;
(*passwd_struct_ptr).pw_gid = passwd.pw_gid;
passwd_struct_offset as _
}
// unsafe { _getpwuid(uid as _) as _}
// 0
}