Andreas Kling
08cd75ac4b
Kernel: Rename FileDescriptor to FileDescription.
...
After reading a bunch of POSIX specs, I've learned that a file descriptor
is the number that refers to a file description, not the description itself.
So this patch renames FileDescriptor to FileDescription, and Process now has
FileDescription* file_description(int fd).
2019-06-07 09:36:51 +02:00
Andreas Kling
a53c922f8a
FileSystem: Rename VFS::fchmod() -> chmod().
2019-06-02 12:52:21 +02:00
Andreas Kling
e67bfdb7f6
FileSystem: Route chown() and fchown() through VFS for access control.
2019-06-02 12:52:21 +02:00
Andreas Kling
5e1c7cb32c
Kernel: Memory-mapped files now have the absolute path as their name.
...
It's generated when the mapping is first created, so it won't update if
the file moves. Maybe that's something we should support, too.
2019-06-02 10:14:28 +02:00
Andreas Kling
93d3d1ede1
Kernel: Add fchown() syscall.
2019-06-01 20:31:36 +02:00
Andreas Kling
2dd9ef6863
Kernel: Make File::absolute_path() const.
2019-06-01 18:56:56 +02:00
Andreas Kling
00de8b9fc4
FileSystem: Don't create a temporary FileDescriptor every time we stat().
...
Instead, move the stat buffer population into InodeMetadata so we can call
it directly from VFS::stat() once we have an Inode.
2019-06-01 18:46:39 +02:00
Andreas Kling
874bffc729
FileSystem: Get rid of VFS::absolute_path() and teach Mount about custodies.
2019-05-30 22:30:29 +02:00
Andreas Kling
393851418b
FileSystem: Port most of the code over to using custodies.
...
The current working directory is now stored as a custody. Likewise for a
process executable file. This unbreaks /proc/PID/fd which has not been
working since we made the filesystem bigger.
This still needs a bunch of work, for instance when renaming or removing
a file somewhere, we have to update the relevant custody links.
2019-05-30 18:58:59 +02:00
Andreas Kling
8fe72d7b3c
Kernel: Make fcntl(F_SETFL) actually update the append/blocking flags.
2019-05-30 15:37:51 +02:00
Andreas Kling
08926e59b3
Kernel: Add InodeFile, a File subclass for regular files.
...
Finally everything that can be held by a FileDescriptor actually inherits
from the File class.
2019-05-30 13:39:17 +02:00
Andreas Kling
66c1a9be3b
Kernel: Pass 'prot' argument to File::mmap() and act on it.
...
Nothing crazy, this just means that PROT_READ allocates readable regions,
and that PROT_WRITE allocates writable ones.
2019-05-30 12:38:35 +02:00
Robin Burchell
c6e79bd53a
Kernel: Support O_APPEND
...
As per the manpage, this acts as a transparent lseek() before write.
2019-05-26 01:32:05 +02:00
Andreas Kling
75866438b5
Kernel: Don't page in entire file immediately on mmap().
...
If we just don't do anything, the page fault handler will load the file
incrementally as-needed instead. :^)
2019-05-18 22:30:55 +02:00
Andreas Kling
959c8f287c
FileDescriptor: It's actually okay to seek past the end of a file. :^)
2019-05-18 21:54:31 +02:00
Andreas Kling
a4e48dce77
Kernel: SharedMemory should implement mmap().
2019-05-18 04:17:53 +02:00
Andreas Kling
6957825444
Kernel: Factor out range allocation from Process::allocate_region*().
...
These functions were doing exactly the same thing for range allocation, so
share that code in an allocate_range() helper.
Region allocation will now also fail if range allocation fails, which means
that mmap() can actually fail without falling apart. Exciting times!
2019-05-17 04:39:22 +02:00
Robin Burchell
f1f3cd58b0
FileSystem: fix errno on lseek() beyond the bounds of a file
...
These are all EINVAL. Also remove bogus assert on metadata.size.
2019-05-16 16:05:08 +02:00
Andreas Kling
2470fdcd9b
Kernel: Make Socket inherit from File.
2019-05-03 20:42:43 +02:00
Andreas Kling
03da7046bd
Kernel: Prepare Socket for becoming a File.
...
Make the Socket functions take a FileDescriptor& rather than a socket role
throughout the code. Also change threads to block on a FileDescriptor,
rather than either an fd index or a Socket.
2019-05-03 20:15:54 +02:00
Andreas Kling
8cbb7f101f
Kernel: Have File virtuals take a FileDescriptor& rather than a Process&.
...
This will allow us to implement different behaviors depending on the role
of the descriptor a File is being accessed through.
2019-04-29 13:58:40 +02:00
Andreas Kling
0a0d739e98
Kernel: Make FIFO inherit from File.
2019-04-29 04:55:54 +02:00
Andreas Kling
a104d7cc93
Kernel: Make SharedMemory inherit from File.
2019-04-28 22:31:31 +02:00
Andreas Kling
c91b0d6b5f
FileDescriptor: Let TTY handle its own absolute_path().
2019-04-28 15:09:23 +02:00
Andreas Kling
e886337a67
Kernel: Make ProcessTracer inherit from File.
2019-04-28 15:02:55 +02:00
Andreas Kling
d5578826af
Kernel: Make it possible to look up FIFO's by ID.
...
This will be useful when implementing the /proc/PID/fd/N links where N is
a file descriptor referring to a FIFO.
2019-04-25 13:53:24 +02:00
Andreas Kling
5c68929aa1
Kernel: Add a systrace() syscall and implement /bin/strace using it.
...
Calling systrace(pid) gives you a file descriptor with a stream of the
syscalls made by a peer process. The process must be owned by the same
UID who calls systrace(). :^)
2019-04-22 18:44:45 +02:00
Andreas Kling
60a819c14a
Kernel: Yet more work on bringing up POSIX SHM.
2019-04-09 02:37:38 +02:00
Andreas Kling
26a06f3fcd
Kernel: More work towards POSIX SHM, also add ftruncate().
2019-04-09 01:10:00 +02:00
Andreas Kling
644c887594
Kernel: Move FIFO into FileSystem/ and Socket+LocalSocket into Net/.
2019-04-06 20:29:48 +02:00