From b4f36bce17cc44673b7a649d19b7155fcfca1e8f Mon Sep 17 00:00:00 2001 From: Jeremy Soller <jackpot51@gmail.com> Date: Thu, 22 Nov 2018 19:09:46 -0700 Subject: [PATCH] Add more stdio_ext functions --- src/header/stdio/ext.rs | 23 +++++++++++++++++++++++ src/header/stdio/mod.rs | 21 +++++++-------------- 2 files changed, 30 insertions(+), 14 deletions(-) create mode 100644 src/header/stdio/ext.rs diff --git a/src/header/stdio/ext.rs b/src/header/stdio/ext.rs new file mode 100644 index 00000000..b33c649d --- /dev/null +++ b/src/header/stdio/ext.rs @@ -0,0 +1,23 @@ +use header::stdio::{FILE, F_NORD, F_NOWR}; +use platform::types::*; + +#[no_mangle] +pub extern "C" fn __freadable(stream: *mut FILE) -> c_int { + let mut stream = unsafe { &mut *stream }.lock(); + + (stream.flags & F_NORD == 0) as c_int +} + +#[no_mangle] +pub extern "C" fn __fwritable(stream: *mut FILE) -> c_int { + let mut stream = unsafe { &mut *stream }.lock(); + + (stream.flags & F_NOWR == 0) as c_int +} + +#[no_mangle] +pub extern "C" fn __fpending(stream: *mut FILE) -> size_t { + let mut stream = unsafe { &mut *stream }.lock(); + + stream.writer.inner.buf.len() as size_t +} diff --git a/src/header/stdio/mod.rs b/src/header/stdio/mod.rs index 4f5953b7..e3001a2b 100644 --- a/src/header/stdio/mod.rs +++ b/src/header/stdio/mod.rs @@ -22,16 +22,16 @@ use platform::{Pal, Sys}; use platform::{errno, WriteByte}; use platform; -mod printf; -mod scanf; +pub use self::constants::*; +mod constants; pub use self::default::*; mod default; -pub use self::constants::*; -mod constants; - +mod ext; mod helpers; +mod printf; +mod scanf; enum Buffer<'a> { Borrowed(&'a mut [u8]), @@ -62,12 +62,12 @@ pub struct FILE { lock: Mutex<()>, file: File, - flags: c_int, + pub(crate) /* stdio_ext */ flags: c_int, read_buf: Buffer<'static>, read_pos: usize, read_size: usize, unget: Option<u8>, - writer: LineWriter<File> + pub(crate) /* stdio_ext */ writer: LineWriter<File> } impl Read for FILE { @@ -390,13 +390,6 @@ pub extern "C" fn fopen(filename: *const c_char, mode: *const c_char) -> *mut FI } } -#[no_mangle] -pub extern "C" fn __fpending(stream: *mut FILE) -> size_t { - let mut stream = unsafe { &mut *stream }.lock(); - - stream.writer.inner.buf.len() as size_t -} - /// Insert a character into the stream #[no_mangle] pub extern "C" fn fputc(c: c_int, stream: *mut FILE) -> c_int { -- GitLab