summaryrefslogtreecommitdiff
path: root/test/test.c
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2014-03-30 19:20:05 +0200
committerJustus Winter <4winter@informatik.uni-hamburg.de>2014-03-30 19:20:05 +0200
commit04fc869149c3ae10d3835049738818e68174d05d (patch)
treea65edd7f02ab50028d5d8de659620ded21ac8df3 /test/test.c
parentbdc34d0383ffd80bc76b24619b26df29307243e0 (diff)
Add portseal
Diffstat (limited to 'test/test.c')
-rw-r--r--test/test.c102
1 files changed, 102 insertions, 0 deletions
diff --git a/test/test.c b/test/test.c
new file mode 100644
index 0000000..b3012d7
--- /dev/null
+++ b/test/test.c
@@ -0,0 +1,102 @@
+#define _GNU_SOURCE
+#include <errno.h>
+#include <error.h>
+#include <fcntl.h>
+#include <hurd.h>
+#include <mach.h>
+#include <stdio.h>
+
+void
+dosth (void)
+{
+ mach_port_t foo;
+ mach_port_t bar = MACH_PORT_DEAD;
+
+ foo = file_name_lookup ("/dev", O_NOTRANS, 0);
+ if (! MACH_PORT_VALID (foo))
+ error (1, errno, "file_name_lookup");
+
+ fprintf (stderr, "dosth looked up %d\n", foo);
+}
+
+void
+donothing (mach_port_t *p)
+{
+}
+
+void
+dosthelse (mach_port_t *p)
+{
+ *p = file_name_lookup ("/bin", O_NOTRANS, 0);
+ if (! MACH_PORT_VALID (*p))
+ error (1, errno, "file_name_lookup");
+
+ fprintf (stderr, "dosthelse looked up %d\n", *p);
+ donothing (p);
+}
+
+mach_port_t some_port;
+mach_port_t some_other_port;
+
+void
+dosthglobal (void)
+{
+ some_port = file_name_lookup ("/sbin", O_NOTRANS, 0);
+ if (! MACH_PORT_VALID (some_port))
+ error (1, errno, "file_name_lookup");
+
+ fprintf (stderr, "dosthglobal looked up %d\n", some_port);
+
+ some_other_port = some_port;
+ some_port = MACH_PORT_NULL;
+}
+
+void
+doleakreceive (void)
+{
+ mach_port_t foo;
+ error_t err = mach_port_allocate (mach_task_self (),
+ MACH_PORT_RIGHT_RECEIVE,
+ &foo);
+ if (err)
+ error (1, errno, "mach_port_allocate");
+
+ fprintf (stderr, "allocated receive port %d\n", foo);
+}
+
+void
+dolookupcwd (void)
+{
+ mach_port_t foo;
+ foo = getcwdir ();
+ if (! MACH_PORT_VALID (foo))
+ error (1, errno, "file_name_lookup");
+
+ fprintf (stderr, "dolookupcwd looked up %d\n", foo);
+}
+
+void
+gopinniped (void)
+{
+ mach_port_deallocate (mach_task_self (), 12345);
+ mach_port_destroy (mach_task_self (), 54321);
+}
+
+int
+main ()
+{
+ dosth ();
+
+ mach_port_t *p = malloc (sizeof *p);
+ dosthelse (p);
+ free (p);
+
+ dosthglobal ();
+ some_other_port = MACH_PORT_NULL;
+
+ doleakreceive ();
+ dolookupcwd ();
+ gopinniped ();
+
+ return 0;
+}