aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/ustat.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/ustat.c')
-rw-r--r--sysdeps/unix/sysv/linux/ustat.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/sysdeps/unix/sysv/linux/ustat.c b/sysdeps/unix/sysv/linux/ustat.c
index 5ffd76511f..e1acbed5b5 100644
--- a/sysdeps/unix/sysv/linux/ustat.c
+++ b/sysdeps/unix/sysv/linux/ustat.c
@@ -28,10 +28,12 @@
int
ustat (dev_t dev, struct ustat *ubuf)
{
- unsigned short int k_dev;
+ unsigned long long int k_dev;
/* We must convert the value to dev_t type used by the kernel. */
- k_dev = ((major (dev) & 0xff) << 8) | (minor (dev) & 0xff);
+ k_dev = dev & ((1ULL << 32) - 1);
+ if (k_dev != dev)
+ return EOVERFLOW;
- return INLINE_SYSCALL (ustat, 2, k_dev, CHECK_1 (ubuf));
+ return INLINE_SYSCALL (ustat, 2, (unsigned int) k_dev, CHECK_1 (ubuf));
}