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
bba2c062fe
FileSystem: Make Inode::lookup() take a StringView.
...
This avoids a lot of String allocation during path resolution.
2019-06-01 18:01:28 +02:00
Andreas Kling
49768524d4
VM: Get rid of KernelPagingScope.
...
Every page directory inherits the kernel page directory, so there's no need
to explicitly enter the kernel's paging scope anymore.
2019-06-01 17:51:48 +02:00
Andreas Kling
00f291b090
Kernel: Set the absolute path as name for executable regions.
2019-06-01 17:50:43 +02:00
Andreas Kling
2e14e5891c
FileSystem: Remove now-unused Inode::parent() and Inode::reverse_lookup().
...
These were only used to implement the old path resolution algorithm.
2019-06-01 17:46:37 +02:00
Andreas Kling
02e21de20a
VM: Always flush TLB for kernel page directory changes.
...
Since the kernel page directory is inherited by all other page directories,
we should always flush the TLB when it's updated.
2019-06-01 17:25:36 +02:00
Andreas Kling
ba58b4617d
VM: Don't remap each Region page twice in page_in().
...
page_in_from_inode() will map the page after reading it from disk, so we
don't need to remap it once again.
2019-06-01 15:45:50 +02:00
Christopher Dumas
6a4cb25557
Terminal: Settings windows can be opened multiple times
2019-06-01 00:07:45 +02:00
Christopher Dumas
f8a02d4733
Terminal: Audible vs Visible beep option
2019-06-01 00:07:45 +02:00
Andreas Kling
9ac95d1867
FileSystem: Pass mode_t to Inode::add_child().
...
This way the Ext2FS code can update its directory entry "file type" fields
correctly based on the file mode. This fixes some e2fsck whining.
2019-05-31 17:41:33 +02:00
Andreas Kling
fdf3608c8a
Update Badge<T> instantiations to simply be {}.
2019-05-31 15:44:04 +02:00
Andreas Kling
fa6446fc0d
FileSystem: VFS should require Badge<Device> for device registration.
2019-05-31 15:36:49 +02:00
Andreas Kling
a1fdda3e20
FileSystem: Don't expose VFS::root_inode().
...
It seems like we don't need to expose this anymore, it's only used by VFS
internally to construct the root custody.
2019-05-31 15:32:19 +02:00
Andreas Kling
056a7fea08
FileSystem: Rename VFS::resolve_path_to_custody() => resolve_path().
2019-05-31 15:30:09 +02:00
Andreas Kling
8adadf8a46
FileSystem: Reuse existing custodies when possible, and keep them updated.
...
Walk the custody cache and try to reuse an existing one when possible.
The VFS is responsible for updating them when something happens that would
cause the described relationship to change.
This is definitely not perfect but it does work for the basic scenarios like
renaming and removing directory entries.
2019-05-31 15:22:52 +02:00
Andreas Kling
3fbddcecd2
Kernel: Discard a process's ELFLoader on finalization.
...
We don't need after that point, and throwing it out might free up some
cached data used for backtraces.
2019-05-31 08:03:58 +02:00
Andreas Kling
d58eb3bf21
Kernel: Process finalization should release cwd and executable custodies.
...
Since Process destruction happens with interrupts disabled, it's not safe to
still hold custodies at that point. Drop them in finalization.
2019-05-31 07:19:54 +02:00
Andreas Kling
e33dadbdd6
Kernel: Do a bit more of do_exec() before disabling interrupts.
...
We definitely need to replace m_executable before clearing interrupts, since
otherwise we might call ~Custody() which would make it assert in locking.
Also avoid calling FileDescriptor::metadata() repeatedly and just cache the
result from the first call.
I also added a comment at the point where we've decided to commit to the new
executable and follow through with the swap.
2019-05-31 07:19:50 +02:00
Andreas Kling
e6a8133b0c
FileSystem: Merge symlink following logic into path resolution.
...
When encountering a symlink, we abandon the custody chain we've been working
on and start over with a new one (by recursing into a new resolution call.)
Caching symlinks in the custody model would be incredibly difficult to get
right with all the extra invalidation it would require, so let's just not.
2019-05-31 06:42:49 +02:00
Andreas Kling
0f3b5e1f02
Kernel: The stat() syscall should follow symlinks.
2019-05-30 23:21:01 +02:00
Andreas Kling
709d168807
FileSystem: Get rid of VFS::resolve_path().
...
The only remaining client was resolve_symbolic_link() which now deals in
custodies instead.
2019-05-30 22:30:29 +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
8e83aac8a3
FileSystem: Get rid of VFS::resolve_path_to_inode() and old_resolve_path().
2019-05-30 22:30:29 +02:00
Andreas Kling
55821c91f8
Kernel: Rename Process::cwd_custody() to Process::current_directory().
...
...and executable_custody() to just executable().
2019-05-30 22:30:25 +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
4cb87b1753
FileSystem: Add a Custody class that represents a parent/child guardianship.
...
A custody is kind of a directory entry abstraction that represents a single
entry in a parent directory that tells us the name of a child inode.
The idea here is for path resolution to produce a chain of custody objects.
2019-05-30 17:46:08 +02:00
Andreas Kling
baaede1bf9
Kernel: Make the Process allocate_region* API's understand "int prot".
...
Instead of having to inspect 'prot' at every call site, make the Process
API's take care of that so we can just pass it through.
2019-05-30 16:14:37 +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
d31ce9eccd
Misc: Add a simple init process
...
This doesn't do much right now, just fork off a bunch of stuff and set priorities.
2019-05-30 02:57:15 +02:00
Robin Burchell
9cd0f6ffac
Kernel/LibC: Implement sched_* functionality to set/get process priority
...
Right now, we allow anything inside a user to raise or lower any other process's
priority. This feels simple enough to me. Linux disallows raising, but
that's annoying in practice.
2019-05-30 02:57:15 +02:00
Robin Burchell
a906098579
Kernel: Fix a bad printf, and stub out SO_ERROR a bit more fully
...
links requests SO_ERROR, so in not supporting it, things were unhappy.
Supporting this properly looks a little messy. I guess Socket will need
an m_error member it sets everywhere it returns an error. Or Syscall
could set it, perhaps, but I don't know if that's the right thing to
do, so let's just stub this for now and file a bug.
2019-05-30 02:02:30 +02:00
Robin Burchell
0dc9af5f7e
Add clang-format file
...
Also run it across the whole tree to get everything using the One True Style.
We don't yet run this in an automated fashion as it's a little slow, but
there is a snippet to do so in makeall.sh.
2019-05-28 17:31:20 +02:00
Andreas Kling
16ea34fc12
Kernel: Remove accidentally committer .orig file.
2019-05-28 13:17:27 +02:00
Christopher Dumas
aa50e5bb13
tiled backgrounds no longer has strange off-by-one pixel errors
2019-05-27 21:40:53 +02:00
Andreas Kling
bb288c1baf
IDEDiskDevice: Implement basic DMA writes.
...
This could share more code with reads, and generally be better. But it works
and it's considerably faster than PIO, so let's use it. :^)
2019-05-26 14:58:21 +02:00
Andreas Kling
0cac84d6bd
Kernel: Sending a signal to yourself should block until dispatch.
...
By moving the sending (and receiving) thread into the BlockedSignal state,
we ensure that the thread doesn't continue executing until the signal
has been dispatched.
2019-05-26 02:35:25 +02:00
Andreas Kling
6ffcee9176
Kernel: Send more specific signals when crashing due to CPU exceptions.
...
- For division by zero, send SIGFPE.
- For illegal instruction, send SIGILL.
- For the rest, default to SIGSEGV.
2019-05-26 02:35:25 +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
75b0e5cce5
Ext2FS: Block #0 can terminate an inode block list early.
...
We were already handling this for the indirect blocks, but the direct ones
would happily consider #0 to be a valid block list entry.
2019-05-25 19:19:43 +02:00
Andreas Kling
728327df8a
Ext2FS: Fix build with EXT2_DEBUG enabled, and tweak some variable names.
2019-05-25 17:23:17 +02:00
Andreas Kling
149b7f92a7
Demos: Start working on a simple WidgetGallery app.
...
It's good to have a place where we can try out all the different widgets.
This needs some more work on a nice layout, and should also include more
of the widgets. :^)
2019-05-24 22:47:41 +02:00
Christopher Dumas
dd84dcf31f
Launcher loads applications from Launcher.ini, is started by default, and is resized automatically
...
Co-Authored-By: Andreas Kling <awesomekling@gmail.com>
2019-05-24 20:40:09 +02:00
Andreas Kling
abbcdba72e
WindowServer: Add 2560x1440 resolution option.
...
Also expand the QEMU VGA memory size to 64 MB, since otherwise we won't
have enough memory for double-buffering the screen.
2019-05-24 14:02:17 +02:00
Andreas Kling
ebf645d72a
Kernel: Tidy up IDEDiskDevice a bit.
...
The main cleanup here is putting the I/O address base in a member variable.
2019-05-24 04:17:15 +02:00
Andreas Kling
fba57d6ba3
Always run QEMU with -debugcon stdio.
...
If someone wants to run without this, they can disable it manually :^)
2019-05-23 20:57:32 +02:00
Andreas Kling
9806a23f83
Kernel: Return ENOSYS if an invalid syscall number is requested.
2019-05-23 17:04:26 +02:00