Compare commits

...
This repository has been archived on 2023-07-03. You can view files and clone it, but cannot push or open issues or pull requests.

6 Commits

7 changed files with 53 additions and 58 deletions

40
Cargo.lock generated
View File

@ -20,7 +20,7 @@ dependencies = [
"regex",
"rustc-hash",
"shlex",
"syn 1.0.109",
"syn",
"which",
]
@ -86,6 +86,12 @@ version = "0.2.140"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
[[package]]
name = "libc_alloc"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a090348b66d90d8507e30f0d2bd88e5a5c454bd1733fc6d617cbc3471bf69ea"
[[package]]
name = "libloading"
version = "0.7.4"
@ -186,13 +192,11 @@ checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
[[package]]
name = "spd"
version = "0.0.1"
version = "0.0.3"
dependencies = [
"bindgen",
"libc",
"quote",
"syn 2.0.8",
"tabwriter",
"libc_alloc",
]
[[package]]
@ -206,38 +210,12 @@ dependencies = [
"unicode-ident",
]
[[package]]
name = "syn"
version = "2.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bcc02725fd69ab9f26eab07fad303e2497fad6fb9eba4f96c4d1687bdf704ad9"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "tabwriter"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36205cfc997faadcc4b0b87aaef3fbedafe20d38d4959a7ca6ff803564051111"
dependencies = [
"unicode-width",
]
[[package]]
name = "unicode-ident"
version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
[[package]]
name = "unicode-width"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
[[package]]
name = "which"
version = "4.4.0"

View File

@ -1,20 +1,19 @@
[package]
name = "spd"
version = "0.0.1"
version = "0.0.3"
edition = "2021"
license = "LGPL-3.0-or-later"
authors = [
"Emma Tebibyte <emma@tebibyte.media>",
"Douman <douman@gmx.se>",
"Matt Mastracci <matthew@mastracci.com>",
]
description ="Minimal standard library replacement containing essential functionality."
repository = "https://git.tebibyte.media/emma/spd"
[dependencies]
libc = "0.2.140"
quote = "1.0.26"
syn = { version = "2.0.8", features = [ "extra-traits" ] }
tabwriter = "1.2.1"
libc_alloc = "1.0.4"
[build-dependencies]
bindgen = "0.64.0"

View File

@ -68,7 +68,7 @@ impl Args {
///On error returns pair: `(string index, Utf8Error)`
///
///The function is safe as long as you pass C style main function arguments.
pub unsafe fn new(argc: isize, argv: *const *const u8) -> Result<Self, (usize, core::str::Utf8Error)> {
pub unsafe fn new(argc: isize, argv: *const *const u8) -> Result<Self, (usize, crate::str::Utf8Error)> {
assert!(argc > 0);
assert!(!argv.is_null());
@ -102,7 +102,7 @@ impl Args {
///Returns slice of raw C strings
pub fn as_slice(&self) -> &[*const u8] {
unsafe {
core::slice::from_raw_parts(self.argv, self.argc)
crate::slice::from_raw_parts(self.argv, self.argc)
}
}

View File

@ -66,7 +66,7 @@
#![cfg_attr(rustfmt, rustfmt_skip)]
mod args;
use args::*;
pub use args::*;
#[allow(unused)]
#[cold]
@ -79,10 +79,10 @@ unsafe fn invalid_cli_args_error() -> libc::c_int {
///Converts C string to Rust's, verifying it is UTF-8
///
///It is UB to pass non-C string as it requires \0
pub unsafe fn c_str_to_rust(ptr: *const u8) -> Result<&'static str, core::str::Utf8Error> {
pub unsafe fn c_str_to_rust(ptr: *const u8) -> Result<&'static str, crate::str::Utf8Error> {
let len = libc::strlen(ptr as *const i8);
let parts = core::slice::from_raw_parts(ptr, len);
core::str::from_utf8(parts)
let parts = crate::slice::from_raw_parts(ptr, len);
crate::str::from_utf8(parts)
}
///Converts C string to Rust's one assuming it is UTF-8
@ -90,8 +90,8 @@ pub unsafe fn c_str_to_rust(ptr: *const u8) -> Result<&'static str, core::str::U
///It is UB to pass non-C string as it requires \0
pub unsafe fn c_str_to_rust_unchecked(ptr: *const u8) -> &'static str {
let len = libc::strlen(ptr as *const i8);
let parts = core::slice::from_raw_parts(ptr, len);
core::str::from_utf8_unchecked(parts)
let parts = crate::slice::from_raw_parts(ptr, len);
crate::str::from_utf8_unchecked(parts)
}
extern "Rust" {

View File

@ -46,11 +46,23 @@
#![no_std]
extern crate alloc;
extern crate core;
pub mod entry;
// pub mod env;
mod macros;
pub mod process;
pub use alloc::{
borrow::*,
boxed::*,
collections::*,
rc::*,
string::*,
vec::*,
};
pub use core::*;
pub use macros::*;
pub use libc_dbg as dbg;
@ -61,4 +73,15 @@ pub use libc_print as print;
pub use libc_println as println;
pub use libc_writeln as writeln;
pub use libc_alloc::LibcAlloc;
pub const SOURCE: &str = "https://git.tebibyte.media/emma/spd.git";
#[global_allocator]
pub static ALLOCATOR: LibcAlloc = LibcAlloc;
#[panic_handler]
pub fn panic(info: &panic::PanicInfo) -> ! {
eprintln!("{:?}", info);
loop {}
}

View File

@ -85,13 +85,10 @@
//! # }
//! ```
#![no_std]
#![allow(dead_code)]
#![allow(unused)]
#![warn(unsafe_op_in_unsafe_fn)]
use core::{convert::TryFrom, file, line, stringify};
/// This forces a "C" library linkage
#[cfg(not(windows))]
#[link(name = "c")]
@ -111,9 +108,9 @@ pub const __LIBC_STDERR: i32 = 2;
#[doc(hidden)]
pub struct __LibCWriter(i32);
impl core::fmt::Write for __LibCWriter {
impl crate::fmt::Write for __LibCWriter {
#[inline]
fn write_str(&mut self, s: &str) -> core::fmt::Result {
fn write_str(&mut self, s: &str) -> crate::fmt::Result {
__libc_println(self.0, s)
}
}
@ -125,24 +122,24 @@ impl __LibCWriter {
}
#[inline]
pub fn write_fmt(&mut self, args: core::fmt::Arguments) -> core::fmt::Result {
core::fmt::Write::write_fmt(self, args)
pub fn write_fmt(&mut self, args: crate::fmt::Arguments) -> crate::fmt::Result {
crate::fmt::Write::write_fmt(self, args)
}
#[inline]
pub fn write_str(&mut self, s: &str) -> core::fmt::Result {
pub fn write_str(&mut self, s: &str) -> crate::fmt::Result {
__libc_println(self.0, s)
}
#[inline]
pub fn write_nl(&mut self) -> core::fmt::Result {
pub fn write_nl(&mut self) -> crate::fmt::Result {
__libc_println(self.0, __LIBC_NEWLINE)
}
}
#[doc(hidden)]
#[inline]
pub fn __libc_println(handle: i32, msg: &str) -> core::fmt::Result {
pub fn __libc_println(handle: i32, msg: &str) -> crate::fmt::Result {
let msg = msg.as_bytes();
let mut written = 0;
@ -162,7 +159,7 @@ unsafe fn libc_write(handle: i32, bytes: &[u8]) -> Option<usize> {
usize::try_from(unsafe {
libc::write(
handle,
bytes.as_ptr().cast::<core::ffi::c_void>(),
bytes.as_ptr().cast::<crate::ffi::c_void>(),
bytes.len(),
)
})
@ -174,7 +171,7 @@ unsafe fn libc_write(handle: i32, bytes: &[u8]) -> Option<usize> {
usize::try_from(unsafe {
libc::write(
handle,
bytes.as_ptr().cast::<core::ffi::c_void>(),
bytes.as_ptr().cast::<crate::ffi::c_void>(),
libc::c_uint::try_from(bytes.len()).unwrap_or(libc::c_uint::MAX),
)
})

View File

@ -35,8 +35,6 @@
include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
extern crate core;
pub fn exit(code: u32) -> ! {
unsafe { libc::exit(code as i32 as libc::c_int); }
}