implement flockfile api, rework stdio locking
[musl] / src / stdio / ftrylockfile.c
diff --git a/src/stdio/ftrylockfile.c b/src/stdio/ftrylockfile.c
new file mode 100644 (file)
index 0000000..725b66e
--- /dev/null
@@ -0,0 +1,18 @@
+#include "stdio_impl.h"
+#include "pthread_impl.h"
+
+int ftrylockfile(FILE *f)
+{
+       libc.lockfile = __lockfile;
+       if (f->owner && f->owner == pthread_self()->tid) {
+               if (f->lockcount == INT_MAX)
+                       return -1;
+               f->lockcount++;
+               return 0;
+       }
+       if (a_swap(&f->lock, 1))
+               return -1;
+       f->owner = pthread_self()->tid;
+       f->lockcount = 1;
+       return 0;
+}