summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2013-05-15 16:15:50 -0400
committerRich Felker <dalias@aerifal.cx>2013-05-15 16:15:50 -0400
commit2c184264eae3797de028403ed1e86c1f7ae5b813 (patch)
treec5566f4862484df3a76929b35d8ccc3ac931f0f7
parent2897bfdd602f3d6a0724bbfdd543e962926b5bbe (diff)
downloadmusl-2c184264eae3797de028403ed1e86c1f7ae5b813.tar.gz
musl-2c184264eae3797de028403ed1e86c1f7ae5b813.tar.bz2
musl-2c184264eae3797de028403ed1e86c1f7ae5b813.tar.xz
musl-2c184264eae3797de028403ed1e86c1f7ae5b813.zip
support full range of dev_t major/minor numbers in makedev, etc. macros
-rw-r--r--include/sys/sysmacros.h13
1 files changed, 10 insertions, 3 deletions
diff --git a/include/sys/sysmacros.h b/include/sys/sysmacros.h
index 2285271f..d6c6aef6 100644
--- a/include/sys/sysmacros.h
+++ b/include/sys/sysmacros.h
@@ -1,8 +1,15 @@
#ifndef _SYS_SYSMACROS_H
#define _SYS_SYSMACROS_H
-#define major(x) ((unsigned)((x) >> 8) & 0xff)
-#define minor(x) ((unsigned)(x) & 0xff)
-#define makedev(x,y) (((x)<<8)|((y)&0xff))
+#define major(x) \
+ ((unsigned)( (((x)>>32) & 0xfffff000) | (((x)>>8) & 0x00000fff) ))
+#define minor(x) \
+ ((unsigned)( (((x)>>12) & 0xffffff00) | ((x) & 0x000000ff) ))
+
+#define makedev(x,y) ( \
+ (((x)&0xfffff000ULL) << 32) | \
+ (((x)&0x00000fffULL) << 8) | \
+ (((y)&0xffffff00ULL) << 12) | \
+ (((y)&0x000000ffULL)) )
#endif