summaryrefslogtreecommitdiff
path: root/source3/tests
diff options
context:
space:
mode:
Diffstat (limited to 'source3/tests')
-rw-r--r--source3/tests/sgi_sysv_hack.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/source3/tests/sgi_sysv_hack.c b/source3/tests/sgi_sysv_hack.c
new file mode 100644
index 0000000000..0fb16f11f8
--- /dev/null
+++ b/source3/tests/sgi_sysv_hack.c
@@ -0,0 +1,46 @@
+/* this tests if we need to define SGI_SEMUN_HACK
+ if we're using gcc on IRIX 6.5.x. */
+
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <sys/sem.h>
+
+#ifndef HAVE_UNION_SEMUN
+union semun {
+ int val;
+ struct semid_ds *buf;
+ unsigned short *array;
+};
+#endif
+
+union semun_hack {
+ int val;
+ struct semid_ds *buf;
+ unsigned short *array;
+ char __dummy[5];
+};
+
+main() {
+ struct semid_ds sem_ds;
+ union semun_hack suh;
+ union semun su;
+ int sem_id, ret;
+
+ ret = 1;
+ sem_id = semget(0xdead6666,1,IPC_CREAT|IPC_EXCL|0777);
+ su.buf = &sem_ds;
+ suh.buf = &sem_ds;
+ if (sem_id != -1) {
+ if ((semctl(sem_id, 0, IPC_STAT, su) == -1) &&
+ (semctl(sem_id, 0, IPC_STAT, suh) != -1)) {
+ ret = 0;
+ }
+ }
+ semctl(sem_id, 0, IPC_RMID, 0);
+ return ret;
+}