From 58f59368f2e3c58beb0d261f3bc917b3579eb0c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20Pastorini?= Date: Thu, 4 May 2023 07:02:48 -0400 Subject: [PATCH] Use `i64` to accomodate for device files' major and minor numbers This is meant as the final step in fixing ogham/exa#1126. --- src/fs/fields.rs | 4 ++-- src/fs/file.rs | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/fs/fields.rs b/src/fs/fields.rs index 2ab874ba..9f9aef10 100644 --- a/src/fs/fields.rs +++ b/src/fs/fields.rs @@ -194,8 +194,8 @@ pub enum Size { /// - #[derive(Copy, Clone)] pub struct DeviceIDs { - pub major: u32, - pub minor: u32, + pub major: i64, + pub minor: i64, } diff --git a/src/fs/file.rs b/src/fs/file.rs index f497bd54..c90d980f 100644 --- a/src/fs/file.rs +++ b/src/fs/file.rs @@ -336,9 +336,11 @@ impl<'dir> File<'dir> { else if self.is_char_device() || self.is_block_device() { let device_ids = self.metadata.rdev(); + // SAFETY: `major()` and `minor()` can return an unsigned integer + // of at most 32bits, so an `i64` is going to accomodate them well f::Size::DeviceIDs(f::DeviceIDs { - major: unsafe { major(device_ids) }, - minor: unsafe { minor(device_ids) }, + major: unsafe { major(device_ids) as i64 }, + minor: unsafe { minor(device_ids) as i64 }, }) } else {