32 lines
742 B
Rust
32 lines
742 B
Rust
use super::{constants, FILE};
|
|
use platform::types::*;
|
|
|
|
pub fn ftello(stream: &mut FILE) -> off_t {
|
|
let pos = stream.seek(
|
|
0,
|
|
if let Some((wbase, wpos, _)) = stream.write {
|
|
if (stream.flags & constants::F_APP > 0) && wpos > wbase {
|
|
constants::SEEK_END
|
|
} else {
|
|
constants::SEEK_CUR
|
|
}
|
|
} else {
|
|
constants::SEEK_CUR
|
|
},
|
|
);
|
|
if pos < 0 {
|
|
return pos;
|
|
}
|
|
let rdiff = if let Some((rpos, rend)) = stream.read {
|
|
rend - rpos
|
|
} else {
|
|
0
|
|
};
|
|
let wdiff = if let Some((wbase, wpos, _)) = stream.write {
|
|
wpos - wbase
|
|
} else {
|
|
0
|
|
};
|
|
pos - rdiff as i64 + wdiff as i64
|
|
}
|