fn seek()

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)
    }