Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix building libstd on on emscripten targets.
Squashed 10 commits: 1) The main cause of the problem is that libstd/os/mod.rs treats emscripten targets as an alias of linux targets, whereas liblibc treats emscripten targets as musl-compliant, so it gets a slightly different struct stat64 defined. This commit adds conditional compilation checks to use the correct timestamp format on fs metadata functions in the case of compiling to emscripten targets. 2) Update previous commit to comply with rust formatting standards. Removed tab characters, remove trailing whitespaces. 3) Move emscripten changes into their own file under libstd/os/emscripten Put libstd/os/linux/fs back to the way it was. 4) Cannot use stat.st_ctim on emscripten to get created time. 5) Remove compile-time conditionals for target_env = musl, it looks like musl builds compile fine already. 6) Undone some formatting changes that are no longer needed, Removed some more target_env="musl" compilation checks that I missed from my previous commit. 7) upgrade to liblibc e19309c, it fixes the differences in the musl stat and stat64 definitions. 8) Undo the compile-time checks to check for emscripten (or musl targets) in the FileAttr struct. No longer needed after updating liblibc to e19309c. 9) Change the MetadataExt implementation of emscripten fs.rs module to match the changes in new liblibc. 10) remove a stray return statement, should have been removed in the previous commit.
- Loading branch information
1 parent
979aaaf
commit 660bbf4
Showing
6 changed files
with
233 additions
and
9 deletions.
There are no files selected for viewing
Submodule liblibc
updated
32 files
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT | ||
// file at the top-level directory of this distribution and at | ||
// http://rust-lang.org/COPYRIGHT. | ||
// | ||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or | ||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license | ||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your | ||
// option. This file may not be copied, modified, or distributed | ||
// except according to those terms. | ||
|
||
#![stable(feature = "metadata_ext", since = "1.1.0")] | ||
|
||
use libc; | ||
|
||
use fs::Metadata; | ||
use sys_common::AsInner; | ||
|
||
#[allow(deprecated)] | ||
use os::emscripten::raw; | ||
|
||
/// OS-specific extension methods for `fs::Metadata` | ||
#[stable(feature = "metadata_ext", since = "1.1.0")] | ||
pub trait MetadataExt { | ||
/// Gain a reference to the underlying `stat` structure which contains | ||
/// the raw information returned by the OS. | ||
/// | ||
/// The contents of the returned `stat` are **not** consistent across | ||
/// Unix platforms. The `os::unix::fs::MetadataExt` trait contains the | ||
/// cross-Unix abstractions contained within the raw stat. | ||
#[stable(feature = "metadata_ext", since = "1.1.0")] | ||
#[rustc_deprecated(since = "1.8.0", | ||
reason = "deprecated in favor of the accessor \ | ||
methods of this trait")] | ||
#[allow(deprecated)] | ||
fn as_raw_stat(&self) -> &raw::stat; | ||
|
||
#[stable(feature = "metadata_ext2", since = "1.8.0")] | ||
fn st_dev(&self) -> u64; | ||
#[stable(feature = "metadata_ext2", since = "1.8.0")] | ||
fn st_ino(&self) -> u64; | ||
#[stable(feature = "metadata_ext2", since = "1.8.0")] | ||
fn st_mode(&self) -> u32; | ||
#[stable(feature = "metadata_ext2", since = "1.8.0")] | ||
fn st_nlink(&self) -> u64; | ||
#[stable(feature = "metadata_ext2", since = "1.8.0")] | ||
fn st_uid(&self) -> u32; | ||
#[stable(feature = "metadata_ext2", since = "1.8.0")] | ||
fn st_gid(&self) -> u32; | ||
#[stable(feature = "metadata_ext2", since = "1.8.0")] | ||
fn st_rdev(&self) -> u64; | ||
#[stable(feature = "metadata_ext2", since = "1.8.0")] | ||
fn st_size(&self) -> u64; | ||
#[stable(feature = "metadata_ext2", since = "1.8.0")] | ||
fn st_atime(&self) -> i64; | ||
#[stable(feature = "metadata_ext2", since = "1.8.0")] | ||
fn st_atime_nsec(&self) -> i64; | ||
#[stable(feature = "metadata_ext2", since = "1.8.0")] | ||
fn st_mtime(&self) -> i64; | ||
#[stable(feature = "metadata_ext2", since = "1.8.0")] | ||
fn st_mtime_nsec(&self) -> i64; | ||
#[stable(feature = "metadata_ext2", since = "1.8.0")] | ||
fn st_ctime(&self) -> i64; | ||
#[stable(feature = "metadata_ext2", since = "1.8.0")] | ||
fn st_ctime_nsec(&self) -> i64; | ||
#[stable(feature = "metadata_ext2", since = "1.8.0")] | ||
fn st_blksize(&self) -> u64; | ||
#[stable(feature = "metadata_ext2", since = "1.8.0")] | ||
fn st_blocks(&self) -> u64; | ||
} | ||
|
||
#[stable(feature = "metadata_ext", since = "1.1.0")] | ||
impl MetadataExt for Metadata { | ||
#[allow(deprecated)] | ||
fn as_raw_stat(&self) -> &raw::stat { | ||
unsafe { | ||
&*(self.as_inner().as_inner() as *const libc::stat64 | ||
as *const raw::stat) | ||
} | ||
} | ||
fn st_dev(&self) -> u64 { | ||
self.as_inner().as_inner().st_dev as u64 | ||
} | ||
fn st_ino(&self) -> u64 { | ||
self.as_inner().as_inner().st_ino as u64 | ||
} | ||
fn st_mode(&self) -> u32 { | ||
self.as_inner().as_inner().st_mode as u32 | ||
} | ||
fn st_nlink(&self) -> u64 { | ||
self.as_inner().as_inner().st_nlink as u64 | ||
} | ||
fn st_uid(&self) -> u32 { | ||
self.as_inner().as_inner().st_uid as u32 | ||
} | ||
fn st_gid(&self) -> u32 { | ||
self.as_inner().as_inner().st_gid as u32 | ||
} | ||
fn st_rdev(&self) -> u64 { | ||
self.as_inner().as_inner().st_rdev as u64 | ||
} | ||
fn st_size(&self) -> u64 { | ||
self.as_inner().as_inner().st_size as u64 | ||
} | ||
fn st_atime(&self) -> i64 { | ||
self.as_inner().as_inner().st_atime as i64 | ||
} | ||
fn st_atime_nsec(&self) -> i64 { | ||
self.as_inner().as_inner().st_atime_nsec as i64 | ||
} | ||
fn st_mtime(&self) -> i64 { | ||
self.as_inner().as_inner().st_mtime as i64 | ||
} | ||
fn st_mtime_nsec(&self) -> i64 { | ||
self.as_inner().as_inner().st_mtime_nsec as i64 | ||
} | ||
fn st_ctime(&self) -> i64 { | ||
self.as_inner().as_inner().st_ctime as i64 | ||
} | ||
fn st_ctime_nsec(&self) -> i64 { | ||
self.as_inner().as_inner().st_ctime_nsec as i64 | ||
} | ||
fn st_blksize(&self) -> u64 { | ||
self.as_inner().as_inner().st_blksize as u64 | ||
} | ||
fn st_blocks(&self) -> u64 { | ||
self.as_inner().as_inner().st_blocks as u64 | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT | ||
// file at the top-level directory of this distribution and at | ||
// http://rust-lang.org/COPYRIGHT. | ||
// | ||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or | ||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license | ||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your | ||
// option. This file may not be copied, modified, or distributed | ||
// except according to those terms. | ||
|
||
//! Linux-specific definitions | ||
|
||
#![stable(feature = "raw_ext", since = "1.1.0")] | ||
|
||
pub mod raw; | ||
pub mod fs; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT | ||
// file at the top-level directory of this distribution and at | ||
// http://rust-lang.org/COPYRIGHT. | ||
// | ||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or | ||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license | ||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your | ||
// option. This file may not be copied, modified, or distributed | ||
// except according to those terms. | ||
|
||
//! Emscripten-specific raw type definitions | ||
//! This is basically exactly the same as the linux definitions, | ||
//! except using the musl-specific stat64 structure in liblibc. | ||
|
||
#![stable(feature = "raw_ext", since = "1.1.0")] | ||
#![rustc_deprecated(since = "1.8.0", | ||
reason = "these type aliases are no longer supported by \ | ||
the standard library, the `libc` crate on \ | ||
crates.io should be used instead for the correct \ | ||
definitions")] | ||
#![allow(deprecated)] | ||
|
||
use os::raw::{c_long, c_short, c_uint, c_ulong}; | ||
|
||
#[stable(feature = "raw_ext", since = "1.1.0")] pub type dev_t = u64; | ||
#[stable(feature = "raw_ext", since = "1.1.0")] pub type mode_t = u32; | ||
|
||
#[unstable(feature = "pthread_t", issue = "29791")] pub type pthread_t = c_ulong; | ||
|
||
#[doc(inline)] | ||
#[stable(feature = "raw_ext", since = "1.1.0")] pub type blkcnt_t = u64; | ||
#[stable(feature = "raw_ext", since = "1.1.0")] pub type blksize_t = u64; | ||
#[stable(feature = "raw_ext", since = "1.1.0")] pub type ino_t = u64; | ||
#[stable(feature = "raw_ext", since = "1.1.0")] pub type nlink_t = u64; | ||
#[stable(feature = "raw_ext", since = "1.1.0")] pub type off_t = u64; | ||
#[stable(feature = "raw_ext", since = "1.1.0")] pub type time_t = c_long; | ||
|
||
#[repr(C)] | ||
#[derive(Clone)] | ||
#[stable(feature = "raw_ext", since = "1.1.0")] | ||
pub struct stat { | ||
#[stable(feature = "raw_ext", since = "1.1.0")] | ||
pub st_dev: u64, | ||
#[stable(feature = "raw_ext", since = "1.1.0")] | ||
pub __pad1: c_short, | ||
#[stable(feature = "raw_ext", since = "1.1.0")] | ||
pub __st_ino: u32, | ||
#[stable(feature = "raw_ext", since = "1.1.0")] | ||
pub st_mode: u32, | ||
#[stable(feature = "raw_ext", since = "1.1.0")] | ||
pub st_nlink: u32, | ||
#[stable(feature = "raw_ext", since = "1.1.0")] | ||
pub st_uid: u32, | ||
#[stable(feature = "raw_ext", since = "1.1.0")] | ||
pub st_gid: u32, | ||
#[stable(feature = "raw_ext", since = "1.1.0")] | ||
pub st_rdev: u64, | ||
#[stable(feature = "raw_ext", since = "1.1.0")] | ||
pub __pad2: c_uint, | ||
#[stable(feature = "raw_ext", since = "1.1.0")] | ||
pub st_size: i64, | ||
#[stable(feature = "raw_ext", since = "1.1.0")] | ||
pub st_blksize: i32, | ||
#[stable(feature = "raw_ext", since = "1.1.0")] | ||
pub st_blocks: i64, | ||
#[stable(feature = "raw_ext", since = "1.1.0")] | ||
pub st_atime: time_t, | ||
#[stable(feature = "raw_ext", since = "1.1.0")] | ||
pub st_atime_nsec: c_long, | ||
#[stable(feature = "raw_ext", since = "1.1.0")] | ||
pub st_mtime: time_t, | ||
#[stable(feature = "raw_ext", since = "1.1.0")] | ||
pub st_mtime_nsec: c_long, | ||
#[stable(feature = "raw_ext", since = "1.1.0")] | ||
pub st_ctime: time_t, | ||
#[stable(feature = "raw_ext", since = "1.1.0")] | ||
pub st_ctime_nsec: c_long, | ||
#[stable(feature = "raw_ext", since = "1.1.0")] | ||
pub st_ino: u64, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters