in rust/ccommon-backend/src/compat.rs [131:156]
fn seek(&mut self, pos: SeekFrom) -> Result<u64> {
use std::convert::TryInto;
let (offset, origin) = match pos {
SeekFrom::Start(offset) => (offset as i64, SEEK_SET),
SeekFrom::Current(offset) => (offset, SEEK_CUR),
SeekFrom::End(offset) => (offset, SEEK_END),
};
let offset: c_long = match offset.try_into() {
Ok(off) => off,
Err(e) => return Err(Error::new(ErrorKind::Other, Box::new(e))),
};
let ret = unsafe { fseek(self.as_mut_ptr(), offset, origin) };
if ret != 0 {
return Err(Error::last_os_error());
}
let off = unsafe { ftell(self.as_mut_ptr()) };
if off < 0 {
return Err(Error::last_os_error());
}
Ok(off as u64)
}