9b0f6b6595
Kernel, libc: Add O_EXCL
2022-10-27 07:55:59 +02:00
1c35eabb2b
open(): Add a third optional mode argument
2022-10-27 07:52:57 +02:00
a3c6635f3e
Kernel, libc: Add O_APPEND and stub out O_CREAT and O_TRUNC
2022-10-27 07:43:55 +02:00
a4e430d35e
Kernel: count the null byte while calculating how much stack space argv will use
2022-10-26 20:05:24 +02:00
7d20c507b1
Kernel, libc, userspace: Implement command-line arguments (argv)
...
The only thing missing now is for sh to pass them on.
2022-10-26 18:57:06 +02:00
af452e2b2a
Kernel, libc: Add dup2()
2022-10-25 18:58:06 +02:00
af46b8d9ac
Kernel: Cleanup file descriptor validation
2022-10-25 18:35:17 +02:00
58b01b74e2
Kernel, libc: Add stat()
2022-10-23 18:35:32 +02:00
e457b88b04
Kernel, libc: Implement O_DIRECTORY and use that in dirent.h
2022-10-23 14:46:27 +02:00
78d72c2f0c
Kernel, libc: Add a getdents() system call
...
This is meant to be a low-level interface to implement dirent.h on top of.
2022-10-23 14:03:46 +02:00
bcdcfc4b45
Kernel: Add a pstat() system call
...
Not part of C or POSIX, but since there is no procfs right now, I thought it would be nice to have an interface to query process information.
It works like this: you pass the process ID and a pointer to a struct pstat (can be null).
If the process ID is -1, the kernel picks the process with the highest PID.
Then, if the pointer to a pstat struct is not null, the kernel fills it in with the process's information, and returns the process's PID.
2022-10-22 14:26:29 +02:00
0faabe02e5
Kernel, libc: Implement O_CLOEXEC
2022-10-22 10:28:02 +02:00
b2f5a0502f
Kernel, libc: Implement O_NONBLOCK
2022-10-21 21:51:03 +02:00
da61e3648f
Kernel: Implement blocking reads
...
This is a huge step forward!! bc actually runs now, without echo or backspace, but it runs!!
2022-10-21 21:26:19 +02:00
bef9158450
Kernel, libc: Add isatty() and F_ISTTY to fcntl()
2022-10-21 18:34:31 +02:00
fcf191aa7a
Kernel, libc: Add fstat()
2022-10-21 18:31:09 +02:00
f7cf395f71
Kernel, libc: Add access()
2022-10-20 19:03:24 +02:00
b035795eb3
Kernel: Move errno.h and (k)assert.h out of the main include directory
...
This is mostly so IDEs don't pick them up instead of the userspace headers :)
2022-10-19 17:41:23 +02:00
a29f7f8df2
Kernel: waitpid: support -1 as PID (wait for any child)
2022-10-19 17:15:30 +02:00
48d4a5910a
Kernel: Add a few convenience functions to manipulate userland memory
2022-10-19 17:13:16 +02:00
671f2a2de3
Kernel, libc: Implement waitpid()
...
FIXME: exec() is now doing weird page table stuff. But at least it works, no panics :)
2022-10-18 21:30:52 +02:00
52d391507d
Kernel: Rename the getpid() syscall to getprocid()
...
Now, we have one single system call to fetch all sorts of identifiers:
PID, PPID, UID, GID; EUID, EGID, and more...
2022-10-18 17:36:17 +02:00
a9d3bdba6f
Kernel: Keep track of a task's PPID
2022-10-18 17:18:37 +02:00
8b17065718
Kernel, libc: Rename gettid() to getpid() and move it to unistd.h
2022-10-17 20:08:44 +02:00
87ef210759
Kernel, libc: Remove spawn()
...
Now, fork() and exec() are both implemented. More POSIX-y, thus spawn can be removed.
2022-10-17 19:55:01 +02:00
a2c05de604
mmap(), mprotect(), munmap(): Check more stuff
2022-10-17 19:32:24 +02:00
ea8a42b8c0
Kernel: Add a name field to the Task structure
2022-10-17 19:12:47 +02:00
64f5078494
Kernel, libc: Implement fork()
...
This time for real.
Also, add a new per-user-task virtual address allocator (UserHeap), so that mmap'ed pages are in user range and can be copied.
2022-10-17 18:43:35 +02:00
966fdc76d7
Move userspace task to userspace memory
2022-10-17 17:30:05 +02:00
682be58d97
AddressSpace: copy instead of linking
2022-10-17 17:24:33 +02:00
c2fa4f380d
Kernel: Use the new Task member functions
2022-10-17 17:07:25 +02:00
ce10fb5743
fcntl(F_DUPFD): Allocate any file descriptor greater than or equal to arg
2022-10-17 17:01:22 +02:00
9b39d618de
Kernel, libc: Implement spawn()
...
This function is a Luna alternative to fork() and exec().
Why? Simply because I can't figure out for the life of me how to implement a working fork().
So meanwhile, we have spawn() as a replacement. exec() still exists, though.
2022-10-16 18:48:35 +02:00
a1146a5ce2
Panic: show panic message on screen
2022-10-16 18:23:33 +02:00
d2e2883a79
Kernel: Make mkdir() accessible to userspace
2022-10-16 17:22:12 +02:00
1624f0360d
exec: More logging
2022-10-15 17:47:57 +02:00
68403dc029
Kernel: Make AddressSpaces reference-counted
2022-10-15 17:40:33 +02:00
62a2bcf2ff
Kernel: Add a clock() system call
2022-10-15 13:17:26 +02:00
3a9dddaa57
Kernel, libc: Remove the rand() system call
...
That's why we now have a VFS and a /dev pseudo-filesystem. To provide that kind of things.
Remember, everything is a file!!
The new way to ask the kernel for random numbers is to read from /dev/random.
2022-10-15 13:04:48 +02:00
613f8170b6
Kernel, libc: Implement mprotect() and use proper PROT_* values
2022-10-15 12:57:14 +02:00
62d631f1b4
Kernel: Rename assert.h to kassert.h so IDEs pickup the kernel header instead of the userspace one
2022-10-15 12:56:48 +02:00
1e86acd4c0
libc: Implement fcntl(F_DUPFD) and dup()
2022-10-15 11:16:34 +02:00
5c61252061
Kernel: Add a new fcntl() system call
2022-10-15 10:56:06 +02:00
1c3377fc98
Prepare for cloning address spaces, not there yet
2022-10-14 18:17:57 +02:00
e43777bd31
Apparently, it just works now.
2022-10-14 18:00:33 +02:00
5abd8814e3
Kernel: Continue moving utilities to a separate subdirectory
2022-10-14 17:33:06 +02:00
26211bd49f
It (almost) works now
...
The only thing doing weird stuff is exec(), so that's commented out and throws ENOSYS right now.
But we have two user tasks running in parallel, isolated from each other!
2022-10-14 16:46:00 +02:00
0c7c249935
exec is still doing some weird stuff, totally corrupting the page tables
2022-10-13 22:20:24 +02:00
5d41b4b113
Almost there...
...
exec() is not working yet. But the rest are!!
2022-10-13 22:13:04 +02:00
24272c57ef
Almost there!
2022-10-13 21:55:51 +02:00