56 lines
1.4 KiB
Rust
56 lines
1.4 KiB
Rust
use crate::{
|
|
header::stdio::{F_ERR, F_NORD, F_NOWR, FILE},
|
|
platform::types::{c_int, size_t},
|
|
};
|
|
|
|
#[unsafe(no_mangle)]
|
|
pub extern "C" fn __freadahead(stream: *mut FILE) -> size_t {
|
|
let stream = unsafe { &mut *stream }.lock();
|
|
|
|
(stream.read_size.saturating_sub(stream.read_pos) + stream.unget.len()) as size_t
|
|
}
|
|
|
|
#[unsafe(no_mangle)]
|
|
pub extern "C" fn __fpending(stream: *mut FILE) -> size_t {
|
|
let stream = unsafe { &mut *stream }.lock();
|
|
|
|
stream.writer.pending()
|
|
}
|
|
|
|
#[unsafe(no_mangle)]
|
|
pub extern "C" fn __freadable(stream: *mut FILE) -> c_int {
|
|
let stream = unsafe { &mut *stream }.lock();
|
|
|
|
c_int::from(stream.flags & F_NORD == 0)
|
|
}
|
|
|
|
#[unsafe(no_mangle)]
|
|
pub extern "C" fn __fwritable(stream: *mut FILE) -> c_int {
|
|
let stream = unsafe { &mut *stream }.lock();
|
|
|
|
c_int::from(stream.flags & F_NOWR == 0)
|
|
}
|
|
|
|
#[unsafe(no_mangle)]
|
|
pub extern "C" fn __fseterr(stream: *mut FILE) {
|
|
let mut stream = unsafe { &mut *stream }.lock();
|
|
|
|
stream.flags |= F_ERR;
|
|
}
|
|
|
|
//TODO: Check last operation when read-write
|
|
#[unsafe(no_mangle)]
|
|
pub extern "C" fn __freading(stream: *mut FILE) -> c_int {
|
|
let stream = unsafe { &mut *stream }.lock();
|
|
|
|
c_int::from(stream.flags & F_NORD == 0)
|
|
}
|
|
|
|
//TODO: Check last operation when read-write
|
|
#[unsafe(no_mangle)]
|
|
pub extern "C" fn __fwriting(stream: *mut FILE) -> c_int {
|
|
let stream = unsafe { &mut *stream }.lock();
|
|
|
|
c_int::from(stream.flags & F_NOWR == 0)
|
|
}
|