1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Copyright 2018 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

//! This module exposes Linux's off64_t, pread*64, and pwrite*64 identifiers as the non-64 POSIX
//! versions, similar to defining _FILE_OFFSET_BITS=64 in a C program.

use std::fs::File;
use std::io::Error;
use std::io::Result;

use super::fallocate;
use super::FallocateMode;
use crate::FileAllocate;

impl FileAllocate for File {
    fn allocate(&mut self, offset: u64, len: u64) -> Result<()> {
        fallocate(self, FallocateMode::Allocate, offset, len)
            .map_err(|e| Error::from_raw_os_error(e.errno()))
    }
}

// This module allows the macros in unix/file_traits.rsto refer to $crate::platform::X and ensures
// other crates don't need to add additional crates to their Cargo.toml.
pub mod lib {
    pub use libc::off64_t as off_t;
    pub use libc::pread64 as pread;
    pub use libc::preadv64 as preadv;
    pub use libc::pwrite64 as pwrite;
    pub use libc::pwritev64 as pwritev;
}