#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
#endif
-/* Provide a mechanism to silence picky compilers, such as gcc 4.6+.
- Parameters should of course normally not be unused, but for example when we
- have multiple implementations of the same interface it may happen. */
-#ifndef __GNUC__
-#define UNUSED_PARAM /*NOTHING*/
+/*
+ * Provide a mechanism to silence picky compilers, such as gcc 4.6+.
+ * Parameters should of course normally not be unused, but for example when
+ * we have multiple implementations of the same interface it may happen.
+ */
+
+#if defined(__GNUC__) && ((__GNUC__ >= 3) || \
+ ((__GNUC__ == 2) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ >= 7)))
+# define UNUSED_PARAM __attribute__((__unused__))
#else
-#define UNUSED_PARAM __attribute__((__unused__))
+# define UNUSED_PARAM /*NOTHING*/
#endif
/*
#define SEGSIZE 512 /* data segment size */
-#ifndef __GNUC__
-#define __attribute__(x)
+#if defined(__GNUC__) && ((__GNUC__ >= 3) || \
+ ((__GNUC__ == 2) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ >= 7)))
+# define PACKED_STRUCT __attribute__((__packed__))
+#else
+# define PACKED_STRUCT /*NOTHING*/
#endif
/* Using a packed struct as binary in a program is begging for problems, but
short th_opcode; /* packet type */
unsigned short th_block; /* all sorts of things */
char th_data[1]; /* data or error string */
-} __attribute__ ((__packed__));
+} PACKED_STRUCT;
#define th_stuff th_block
#define th_code th_block