summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/misc/Makefile14
-rw-r--r--test/misc/sem.c43
2 files changed, 56 insertions, 1 deletions
diff --git a/test/misc/Makefile b/test/misc/Makefile
index 60476890f..ae49a865a 100644
--- a/test/misc/Makefile
+++ b/test/misc/Makefile
@@ -19,7 +19,7 @@
TESTDIR=../
include $(TESTDIR)/Rules.mak
-TARGETS=outb
+TARGETS=sem outb
all: $(TARGETS)
outb: outb.c ../testsuite.h Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
@@ -32,6 +32,18 @@ outb: outb.c ../testsuite.h Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC
$(STRIPTOOL) -x -R .note -R .comment $@
./$@
-@ echo " "
+
+sem: sem.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
+ -@ echo "-------"
+ -@ echo " "
+ -@ echo "Compiling vs uClibc: "
+ -@ echo " "
+ $(CC) $(CFLAGS) -c $< -o $@.o
+ $(CC) $(LDFLAGS) $@.o -o $@ $(EXTRA_LIBS)
+ $(STRIPTOOL) -x -R .note -R .comment $@
+ -./$@
+ -@ echo " "
+
clean:
rm -f *.[oa] *~ core $(TARGETS)
diff --git a/test/misc/sem.c b/test/misc/sem.c
new file mode 100644
index 000000000..7606fd180
--- /dev/null
+++ b/test/misc/sem.c
@@ -0,0 +1,43 @@
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/sem.h>
+
+int main(void)
+{
+ int k, r;
+ union semun {
+ int val;
+ struct semid_ds *buf;
+ unsigned short int *array;
+ struct seminfo *__buf;
+ } sd;
+ struct semid_ds sd_buf;
+
+ k = semget(IPC_PRIVATE, 10, IPC_CREAT | 0666 );
+ printf("%d\n", k);
+
+ if (k < 0) {
+ printf("semget failed: %m\n");
+ return 1;
+ }
+
+ sd.buf = &sd_buf;
+ r = semctl(k, 0, IPC_STAT, sd);
+ printf("%d\n", r);
+
+ if (r < 0) {
+ printf("semctl IPC_STAT failed: %m\n");
+ return 1;
+ }
+
+ printf("sem_nsems = %lu\n", sd_buf.sem_nsems);
+ if (sd_buf.sem_nsems != 10) {
+ printf("failed: incorrect sem_nsems!\n");
+ return 1;
+ }
+
+ printf("succeeded\n");
+
+ return 0;
+}