From 239009631ec4ec44282bfbbb1cdb55127722a524 Mon Sep 17 00:00:00 2001 From: Mark McCaskey Date: Tue, 1 Oct 2019 14:40:58 -0700 Subject: [PATCH] Revert modularization, make feature default --- lib/runtime-c-api/Cargo.toml | 2 +- lib/runtime-c-api/src/import.rs | 185 ++++++++++++++++---------------- 2 files changed, 94 insertions(+), 93 deletions(-) diff --git a/lib/runtime-c-api/Cargo.toml b/lib/runtime-c-api/Cargo.toml index b59de514f1b..75d421414b5 100644 --- a/lib/runtime-c-api/Cargo.toml +++ b/lib/runtime-c-api/Cargo.toml @@ -31,7 +31,7 @@ version = "0.7.0" optional = true [features] -default = ["cranelift-backend"] +default = ["cranelift-backend", "wasi"] debug = ["wasmer-runtime/debug"] cranelift-backend = ["wasmer-runtime/cranelift", "wasmer-runtime/default-backend-cranelift"] llvm-backend = ["wasmer-runtime/llvm", "wasmer-runtime/default-backend-llvm"] diff --git a/lib/runtime-c-api/src/import.rs b/lib/runtime-c-api/src/import.rs index 3d8cd6d2f28..abd35c9d075 100644 --- a/lib/runtime-c-api/src/import.rs +++ b/lib/runtime-c-api/src/import.rs @@ -52,107 +52,108 @@ pub unsafe extern "C" fn wasmer_import_object_new() -> *mut wasmer_import_object } #[cfg(feature = "wasi")] -use std::path::PathBuf; +mod wasi { + use super::*; + use std::path::PathBuf; + + /// Opens a directory that's visible to the WASI module as `alias` but + /// is backed by the host file at `host_file_path` + #[repr(C)] + pub struct wasmer_wasi_map_dir_entry_t { + /// What the WASI module will see in its virtual root + pub alias: wasmer_byte_array, + /// The backing file that the WASI module will interact with via the alias + pub host_file_path: wasmer_byte_array, + } -#[cfg(feature = "wasi")] -/// Opens a directory that's visible to the WASI module as `alias` but -/// is backed by the host file at `host_file_path` -#[repr(C)] -pub struct wasmer_wasi_map_dir_entry_t { - /// What the WASI module will see in its virtual root - pub alias: wasmer_byte_array, - /// The backing file that the WASI module will interact with via the alias - pub host_file_path: wasmer_byte_array, -} + impl wasmer_wasi_map_dir_entry_t { + /// Converts the data into owned, Rust types + pub unsafe fn as_tuple(&self) -> Result<(String, PathBuf), std::str::Utf8Error> { + let alias = self.alias.as_str()?.to_owned(); + let host_path = std::path::PathBuf::from(self.host_file_path.as_str()?); -#[cfg(feature = "wasi")] -impl wasmer_wasi_map_dir_entry_t { - /// Converts the data into owned, Rust types - pub unsafe fn as_tuple(&self) -> Result<(String, PathBuf), std::str::Utf8Error> { - let alias = self.alias.as_str()?.to_owned(); - let host_path = std::path::PathBuf::from(self.host_file_path.as_str()?); + Ok((alias, host_path)) + } + } - Ok((alias, host_path)) + /// Creates a WASI import object + #[no_mangle] + pub unsafe extern "C" fn wasmer_wasi_generate_import_object( + args: *const wasmer_byte_array, + args_len: c_uint, + envs: *const wasmer_byte_array, + envs_len: c_uint, + preopened_files: *const wasmer_byte_array, + preopened_files_len: c_uint, + mapped_dirs: *const wasmer_wasi_map_dir_entry_t, + mapped_dirs_len: c_uint, + ) -> *mut wasmer_import_object_t { + let arg_list = std::slice::from_raw_parts(args, args_len as usize); + let env_list = std::slice::from_raw_parts(envs, envs_len as usize); + let preopened_file_list = + std::slice::from_raw_parts(preopened_files, preopened_files_len as usize); + let mapped_dir_list = std::slice::from_raw_parts(mapped_dirs, mapped_dirs_len as usize); + + wasmer_wasi_generate_import_object_inner( + arg_list, + env_list, + preopened_file_list, + mapped_dir_list, + ) + .unwrap_or(std::ptr::null_mut()) } -} -#[cfg(feature = "wasi")] -/// Creates a WASI import object -#[no_mangle] -pub unsafe extern "C" fn wasmer_wasi_generate_import_object( - args: *const wasmer_byte_array, - args_len: c_uint, - envs: *const wasmer_byte_array, - envs_len: c_uint, - preopened_files: *const wasmer_byte_array, - preopened_files_len: c_uint, - mapped_dirs: *const wasmer_wasi_map_dir_entry_t, - mapped_dirs_len: c_uint, -) -> *mut wasmer_import_object_t { - let arg_list = std::slice::from_raw_parts(args, args_len as usize); - let env_list = std::slice::from_raw_parts(envs, envs_len as usize); - let preopened_file_list = - std::slice::from_raw_parts(preopened_files, preopened_files_len as usize); - let mapped_dir_list = std::slice::from_raw_parts(mapped_dirs, mapped_dirs_len as usize); - - wasmer_wasi_generate_import_object_inner( - arg_list, - env_list, - preopened_file_list, - mapped_dir_list, - ) - .unwrap_or(std::ptr::null_mut()) -} + /// Inner function that wraps error handling + fn wasmer_wasi_generate_import_object_inner( + arg_list: &[wasmer_byte_array], + env_list: &[wasmer_byte_array], + preopened_file_list: &[wasmer_byte_array], + mapped_dir_list: &[wasmer_wasi_map_dir_entry_t], + ) -> Result<*mut wasmer_import_object_t, std::str::Utf8Error> { + let arg_vec = arg_list.iter().map(|arg| unsafe { arg.as_vec() }).collect(); + let env_vec = env_list + .iter() + .map(|env_var| unsafe { env_var.as_vec() }) + .collect(); + let po_file_vec = preopened_file_list + .iter() + .map(|po_file| Ok(unsafe { po_file.as_str()? }.to_owned())) + .collect::, _>>()?; + let mapped_dir_vec = mapped_dir_list + .iter() + .map(|entry| unsafe { entry.as_tuple() }) + .collect::, _>>()?; + + let import_object = Box::new(wasmer_wasi::generate_import_object( + arg_vec, + env_vec, + po_file_vec, + mapped_dir_vec, + )); + Ok(Box::into_raw(import_object) as *mut wasmer_import_object_t) + } -#[cfg(feature = "wasi")] -/// Inner function that wraps error handling -fn wasmer_wasi_generate_import_object_inner( - arg_list: &[wasmer_byte_array], - env_list: &[wasmer_byte_array], - preopened_file_list: &[wasmer_byte_array], - mapped_dir_list: &[wasmer_wasi_map_dir_entry_t], -) -> Result<*mut wasmer_import_object_t, std::str::Utf8Error> { - let arg_vec = arg_list.iter().map(|arg| unsafe { arg.as_vec() }).collect(); - let env_vec = env_list - .iter() - .map(|env_var| unsafe { env_var.as_vec() }) - .collect(); - let po_file_vec = preopened_file_list - .iter() - .map(|po_file| Ok(PathBuf::from(unsafe { po_file.as_str()? }))) - .collect::, _>>()?; - let mapped_dir_vec = mapped_dir_list - .iter() - .map(|entry| unsafe { entry.as_tuple() }) - .collect::, _>>()?; - - let import_object = Box::new(wasmer_wasi::generate_import_object( - arg_vec, - env_vec, - po_file_vec, - mapped_dir_vec, - )); - Ok(Box::into_raw(import_object) as *mut wasmer_import_object_t) + /// Convenience function that creates a WASI import object with no arguments, + /// environment variables, preopened files, or mapped directories. + /// + /// This function is the same as calling [`wasmer_wasi_generate_import_object`] with all + /// empty values. + #[no_mangle] + pub unsafe extern "C" fn wasmer_wasi_generate_default_import_object( + ) -> *mut wasmer_import_object_t { + let import_object = Box::new(wasmer_wasi::generate_import_object( + vec![], + vec![], + vec![], + vec![], + )); + + Box::into_raw(import_object) as *mut wasmer_import_object_t + } } #[cfg(feature = "wasi")] -/// Convenience function that creates a WASI import object with no arguments, -/// environment variables, preopened files, or mapped directories. -/// -/// This function is the same as calling [`wasmer_wasi_generate_import_object`] with all -/// empty values. -#[no_mangle] -pub unsafe extern "C" fn wasmer_wasi_generate_default_import_object() -> *mut wasmer_import_object_t -{ - let import_object = Box::new(wasmer_wasi::generate_import_object( - vec![], - vec![], - vec![], - vec![], - )); - - Box::into_raw(import_object) as *mut wasmer_import_object_t -} +pub use self::wasi::*; /// Extends an existing import object with new imports #[allow(clippy::cast_ptr_alignment)]