summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md4
-rw-r--r--src/sys/stat.rs18
2 files changed, 19 insertions, 3 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bafe4f16..c114fe4f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -35,6 +35,8 @@ This project adheres to [Semantic Versioning](http://semver.org/).
([#491](https://github.com/nix-rust/nix/pull/491))
- Added `fchdir` in `::nix::unistd`
([#497](https://github.com/nix-rust/nix/pull/497))
+- Added `major` and `minor` in `::nix::sys::stat` for decomposing `dev_t`
+ ([#508](https://github.com/nix-rust/nix/pull/508))
### Changed
- `epoll_ctl` now could accept None as argument `event`
@@ -91,6 +93,8 @@ This project adheres to [Semantic Versioning](http://semver.org/).
([#429](https://github.com/nix-rust/nix/pull/429))
- Fixed clone passing a potentially unaligned stack.
([#490](https://github.com/nix-rust/nix/pull/490))
+- Fixed mkdev not creating a `dev_t` the same way as libc.
+ ([#508](https://github.com/nix-rust/nix/pull/508))
## [0.7.0] 2016-09-09
diff --git a/src/sys/stat.rs b/src/sys/stat.rs
index 1beb349e..4bb4927a 100644
--- a/src/sys/stat.rs
+++ b/src/sys/stat.rs
@@ -63,11 +63,23 @@ pub fn mknod<P: ?Sized + NixPath>(path: &P, kind: SFlag, perm: Mode, dev: dev_t)
}
#[cfg(target_os = "linux")]
-const MINORBITS: usize = 20;
+pub fn major(dev: dev_t) -> u64 {
+ ((dev >> 32) & 0xfffff000) |
+ ((dev >> 8) & 0x00000fff)
+}
+
+#[cfg(target_os = "linux")]
+pub fn minor(dev: dev_t) -> u64 {
+ ((dev >> 12) & 0xffffff00) |
+ ((dev ) & 0x000000ff)
+}
#[cfg(target_os = "linux")]
-pub fn mkdev(major: u64, minor: u64) -> dev_t {
- (major << MINORBITS) | minor
+pub fn makedev(major: u64, minor: u64) -> dev_t {
+ ((major & 0xfffff000) << 32) |
+ ((major & 0x00000fff) << 8) |
+ ((minor & 0xffffff00) << 12) |
+ ((minor & 0x000000ff) )
}
pub fn umask(mode: Mode) -> Mode {