aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2012-05-24 17:02:02 -0700
committerH. Peter Anvin <hpa@zytor.com>2012-05-24 17:02:02 -0700
commitc96ae78fe9c8588732f19fd58c7bc1c7f45137f0 (patch)
tree1f64cfd2ec482fd012b73a90c6d81d6e47d429a0
parent709e0261caf798d3813228ffeef08e460b4c03a1 (diff)
downloadklibc-c96ae78fe9c8588732f19fd58c7bc1c7f45137f0.tar.gz
[klibc] sys/sysmacros.h: define major, minor, and makedev as macros
There seems to exist programs in the field that assume major(), minor() and makedev() are argument-taking macros, resulting in monstrosities like: int major, minor; major = major(st.st_rdev); minor = minor(st.st_rdev); Although such code really should clean their house, in the interest of minimizing porting friction define major, minor and makedev as macros. While we are at it, clean up the type handling in the pure macro versions. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
-rw-r--r--usr/include/sys/sysmacros.h16
1 files changed, 10 insertions, 6 deletions
diff --git a/usr/include/sys/sysmacros.h b/usr/include/sys/sysmacros.h
index ab2b2d4077b7a..efb476ccc7209 100644
--- a/usr/include/sys/sysmacros.h
+++ b/usr/include/sys/sysmacros.h
@@ -11,23 +11,27 @@
#include <klibc/compiler.h>
#include <sys/types.h>
-#define __major(__d) (((__d) >> 8) & 0xfff)
-__static_inline int major(dev_t __d)
+#define __major(__d) ((int)(((__d) >> 8) & 0xfffU))
+__static_inline int _major(dev_t __d)
{
return __major(__d);
}
+#define major(__d) _major(__d)
-#define __minor(__d) (((__d) & 0xff)|(((__d) >> 12) & 0xfff00))
-__static_inline int minor(dev_t __d)
+#define __minor(__d) ((int)(((__d) & 0xffU)|(((__d) >> 12) & 0xfff00U)))
+__static_inline int _minor(dev_t __d)
{
return __minor(__d);
}
+#define minor(__d) _minor(__d)
#define __makedev(__ma, __mi) \
- ((((__ma) & 0xfff) << 8)|((__mi) & 0xff)|(((__mi) & 0xfff00) << 12))
-__static_inline dev_t makedev(int __ma, int __mi)
+ ((dev_t)((((__ma) & 0xfffU) << 8)| \
+ ((__mi) & 0xffU)|(((__mi) & 0xfff00U) << 12)))
+__static_inline dev_t _makedev(int __ma, int __mi)
{
return __makedev(__ma, __mi);
}
+#define makedev(__ma, __mi) _makedev(__ma, __mi)
#endif /* _SYS_SYSMACROS_H */