]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - c_src/libbcachefs/thread_with_file.h
move Rust sources to top level, C sources into c_src
[bcachefs-tools-debian] / c_src / libbcachefs / thread_with_file.h
diff --git a/c_src/libbcachefs/thread_with_file.h b/c_src/libbcachefs/thread_with_file.h
new file mode 100644 (file)
index 0000000..05879c5
--- /dev/null
@@ -0,0 +1,41 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _BCACHEFS_THREAD_WITH_FILE_H
+#define _BCACHEFS_THREAD_WITH_FILE_H
+
+#include "thread_with_file_types.h"
+
+struct task_struct;
+
+struct thread_with_file {
+       struct task_struct      *task;
+       int                     ret;
+       bool                    done;
+};
+
+void bch2_thread_with_file_exit(struct thread_with_file *);
+int bch2_run_thread_with_file(struct thread_with_file *,
+                             const struct file_operations *,
+                             int (*fn)(void *));
+
+struct thread_with_stdio {
+       struct thread_with_file thr;
+       struct stdio_redirect   stdio;
+       DARRAY(char)            output2;
+       void                    (*exit)(struct thread_with_stdio *);
+};
+
+static inline void thread_with_stdio_done(struct thread_with_stdio *thr)
+{
+       thr->thr.done = true;
+       thr->stdio.done = true;
+       wake_up(&thr->stdio.input_wait);
+       wake_up(&thr->stdio.output_wait);
+}
+
+int bch2_run_thread_with_stdio(struct thread_with_stdio *,
+                              void (*exit)(struct thread_with_stdio *),
+                              int (*fn)(void *));
+int bch2_stdio_redirect_read(struct stdio_redirect *, char *, size_t);
+int bch2_stdio_redirect_readline(struct stdio_redirect *, char *, size_t);
+
+#endif /* _BCACHEFS_THREAD_WITH_FILE_H */