Index: fusl/src/thread/pthread_cleanup_push.c |
diff --git a/fusl/src/thread/pthread_cleanup_push.c b/fusl/src/thread/pthread_cleanup_push.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9b21764b56b0bea71300b30dedaf950248135112 |
--- /dev/null |
+++ b/fusl/src/thread/pthread_cleanup_push.c |
@@ -0,0 +1,20 @@ |
+#include "pthread_impl.h" |
+ |
+static void dummy(struct __ptcb *cb) |
+{ |
+} |
+weak_alias(dummy, __do_cleanup_push); |
+weak_alias(dummy, __do_cleanup_pop); |
+ |
+void _pthread_cleanup_push(struct __ptcb *cb, void (*f)(void *), void *x) |
+{ |
+ cb->__f = f; |
+ cb->__x = x; |
+ __do_cleanup_push(cb); |
+} |
+ |
+void _pthread_cleanup_pop(struct __ptcb *cb, int run) |
+{ |
+ __do_cleanup_pop(cb); |
+ if (run) cb->__f(cb->__x); |
+} |