support full range of dev_t major/minor numbers in makedev, etc. macros
authorRich Felker <dalias@aerifal.cx>
Wed, 15 May 2013 20:15:50 +0000 (16:15 -0400)
committerRich Felker <dalias@aerifal.cx>
Wed, 15 May 2013 20:15:50 +0000 (16:15 -0400)
include/sys/sysmacros.h

index 2285271..d6c6aef 100644 (file)
@@ -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