summaryrefslogtreecommitdiff
path: root/lib/libc/include/io.h
diff options
context:
space:
mode:
authorKacper <kacper@mail.openlinux.dev>2025-12-07 20:10:31 +0100
committerKacper <kacper@mail.openlinux.dev>2025-12-07 20:10:31 +0100
commitfc00c656c96528112d05cf0edf8631bd5eaea446 (patch)
treea6e0e6c588191a8bd1c64afc3b7a258e3e66c236 /lib/libc/include/io.h
Add build system scaffolding and libc headers
Diffstat (limited to 'lib/libc/include/io.h')
-rw-r--r--lib/libc/include/io.h55
1 files changed, 55 insertions, 0 deletions
diff --git a/lib/libc/include/io.h b/lib/libc/include/io.h
new file mode 100644
index 00000000..675a3cc3
--- /dev/null
+++ b/lib/libc/include/io.h
@@ -0,0 +1,55 @@
+#ifndef __LIBC_IO
+#define __LIBC_IO
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+#include <sys/types.h>
+#include <stdatomic.h>
+
+typedef __SIZE_TYPE__ size_t;
+
+#define _IO_ERR 0x4
+#define _IO_EOF 0x8
+#define _IO_WIDE 0x10
+
+/* Buffering modes */
+#define _IOFBF 0 /* Full buffering */
+#define _IOLBF 1 /* Line buffering */
+#define _IONBF 2 /* No buffering */
+
+/* File access modes */
+#ifndef O_RDONLY
+#define O_RDONLY 0
+#define O_WRONLY 1
+#define O_RDWR 2
+#define O_ACCMODE 3
+#endif
+
+/* Atomic operations for threading */
+#define LIBC_LOCK(x) \
+ while (atomic_flag_test_and_set(&(x))) { \
+ }
+#define LIBC_UNLOCK(x) atomic_flag_clear(&(x))
+
+struct __FILE {
+ int fd;
+ uint32_t flags;
+ int type;
+ pid_t pid;
+ atomic_flag lock;
+ char *buf;
+ int eof;
+ size_t buf_size;
+ size_t buf_pos;
+ size_t buf_len;
+ unsigned char unget_buf[16];
+ size_t unget_cnt;
+ off_t offset;
+ struct __FILE *next;
+};
+
+void __libc_fadd(struct __FILE *f);
+
+#endif