Define macros in a special way if gcc is not used and so dev_t is an
authordrepper <drepper>
Wed, 27 Aug 1997 20:07:38 +0000 (20:07 +0000)
committerdrepper <drepper>
Wed, 27 Aug 1997 20:07:38 +0000 (20:07 +0000)
array.

sysdeps/unix/sysv/linux/sys/sysmacros.h

index 5c1e1f7..55486fe 100644 (file)
 
 #define _SYS_SYSMACROS_H       1
 
-/* For compatibility we provide alternative names.  */
-#define major(dev) ((int)(((dev) >> 8) & 0xff))
-#define minor(dev) ((int)((dev) & 0xff))
-#define makedev(major, minor) (((major) << 8) | (minor))
+/* For compatibility we provide alternative names.
+
+   The problem here is that compilers other than GCC probably don't
+   have the `long long' type and so `dev_t' is actually an array.  */
+#if defined __GNUC__ && __GNUC__ >= 2
+# define major(dev) ((int)(((dev) >> 8) & 0xff))
+# define minor(dev) ((int)((dev) & 0xff))
+# define makedev(major, minor) (((major) << 8) | (minor))
+#else
+# define major(dev) (((dev).__val[0] >> 8) & 0xff)
+# define minor(dev) ((dev).__val[0] & 0xff)
+# define makedev(major, minor) { (((major) << 8) | (minor)), 0 }
+#endif
 
 #endif /* _SYS_SYSMACROS_H */