summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1997-08-25 20:47:28 +0000
committerUlrich Drepper <drepper@redhat.com>1997-08-25 20:47:28 +0000
commit75a48d14640162d757fb0a89b1289d50bda93f06 (patch)
treebe674ac490b994131b8cfdb9f86ad6698ded1644
parentc1f5a90b591911bf6d2cf83b05b47ffdf12be499 (diff)
Define macros in a special way if gcc is not used and so dev_t is an
array.
-rw-r--r--sysdeps/unix/sysv/linux/sys/sysmacros.h17
1 files changed, 13 insertions, 4 deletions
diff --git a/sysdeps/unix/sysv/linux/sys/sysmacros.h b/sysdeps/unix/sysv/linux/sys/sysmacros.h
index 85b1b85d2e..55486feb3e 100644
--- a/sysdeps/unix/sysv/linux/sys/sysmacros.h
+++ b/sysdeps/unix/sysv/linux/sys/sysmacros.h
@@ -21,9 +21,18 @@
#define _SYS_SYSMACROS_H 1
-/* For compatibility we provide alternative names. */
-#define major(dev) (((dev) >> 8) & 0xff)
-#define minor(dev) ((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 */