diff --git a/src/header/stdio/ext.rs b/src/header/stdio/ext.rs new file mode 100644 index 0000000000000000000000000000000000000000..b33c649d6585563fc0cbee8744d2c8d63183e485 --- /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 4f5953b78d918b8e2a0757d13ffce77d818916be..e3001a2bc7f11d34fbb0e31d11de1c036f249731 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 {