| Age | Commit message (Collapse) | Author |
|
filesystem: De-globalize registered_cache_union
|
|
kernel: Divide Event into ReadableEvent and WritableEvent
|
|
service/fsp_srv: Implement CleanDirectoryRecursively
|
|
service/audio/audout_u: Amend constructor initialization list order
|
|
Fixed crash with SetNpadMode
|
|
Added to both dynarmic and unicorn
|
|
When we get an svcBreak we get a backtrace now
|
|
Similar to the NRO changes, we can also pass the process explicitly as a
parameter from Load instead of indirecting through the System class.
|
|
This simply acts as a forwarding function for the Load() function, so
this doesn't need to be directly exposed.
|
|
The path buffer is actually 0x301 (769) characters in length, with the
extra character being intended for the null-terminator.
|
|
Load() is already given the process instance as a parameter, so instead
of coupling the class to the System class, we can just forward that
parameter to LoadNro()
|
|
Updates the function table for IClientEpSession based off information
provided by SwitchBrew.
|
|
Updates the function table according to information provided by
SwitchBrew.
|
|
fixed crash due to handheld
|
|
instance to act upon
The kernel uses the handle table of the current process to retrieve the
process that should be used to retrieve certain information. To someone
not familiar with the kernel, this might raise the question of "Ok,
sounds nice, but doesn't this make it impossible to retrieve information
about the current process?".
No, it doesn't, because HandleTable instances in the kernel have the
notion of a "pseudo-handle", where certain values allow the kernel to
lookup objects outside of a given handle table. Currently, there's only
a pseudo-handle for the current process (0xFFFF8001) and a pseudo-handle
for the current thread (0xFFFF8000), so to retrieve the current process,
one would just pass 0xFFFF8001 into svcGetInfo.
The lookup itself in the handle table would be something like:
template <typename T>
T* Lookup(Handle handle) {
if (handle == PSEUDO_HANDLE_CURRENT_PROCESS) {
return CurrentProcess();
}
if (handle == PSUEDO_HANDLE_CURRENT_THREAD) {
return CurrentThread();
}
return static_cast<T*>(&objects[handle]);
}
which, as is shown, allows accessing the current process or current
thread, even if those two objects aren't actually within the HandleTable
instance.
|
|
info categories
Our implementation of svcGetInfo was slightly incorrect in that we
weren't doing proper error checking everywhere. Instead, reorganize it
to be similar to how the kernel seems to do it.
|
|
|
|
Orders the constructor initializer list the same way the members of the
class are declared. Prevents -Wreorder warnings
|
|
Also inverts if statements where applicable to allow unindenting code a
little bit.
|
|
We can just return a new instance of this when it's requested. This only
ever holds pointers to the existing registed caches, so it's not a large
object. Plus, this also gets rid of the need to keep around a separate
member function just to properly clear out the union.
Gets rid of one of five globals in the filesystem code.
|
|
|
|
Services/VI: Dereferencing an uninitialized std::optional is undefined behavior.
|
|
A non-existent parameter was left in some formatting calls (the logging
macro for which only does anything meaningful on debug builds)
|
|
ReadOnlyVfsDirectory by default
Ensures that read only indeed means read only.
|
|
This is the same behavior-wise as DeleteDirectoryRecursively, with the
only difference being that it doesn't delete the top level directory in
the hierarchy, so given:
root_dir/
- some_dir/
- File.txt
- OtherFile.txt
The end result is just:
root_dir/
|
|
Assert that it is not empty before using it in the DequeueBuffer wait callback.
|
|
This code was around prior to the introduction of PushEnum, so convert
it over so we don't need to cast here.
|
|
This function simply converts a given index into a language code.
|
|
|
|
|
|
|
|
|
|
Used to store ReadableEvents of all events on the system.
|
|
More hardware accurate. On the actual system, there is a differentiation between the signaler and signalee, they form a client/server relationship much like ServerPort and ClientPort.
|
|
|
|
Changed logging to be "Log before execution", Added more error logging, all services/svc should now log on some level
|
|
npad: Use NPadIdToIndex to prevent invalid array access
|
|
gpu: Rewrite GPU command list processing with DmaPusher class.
|
|
|
|
file_sys/registered_cache: Use regular const references instead of std::shared_ptr for InstallEntry()
|
|
|
|
|
|
profile_manager: Save and load ProfileData from disk
|
|
|
|
std::shared_ptr for InstallEntry()
These parameters don't need to utilize a shared lifecycle directly in
the interface. Instead, the caller should provide a regular reference
for the function to use. This also allows the type system to flag
attempts to pass nullptr and makes it more generic, since it can now be
used in contexts where a shared_ptr isn't being used (in other words, we
don't constrain the usage of the interface to a particular mode of
memory management).
|
|
While we're at it, organize the array linearly, since clang formats the
array elements quite wide length-wise with the addition of the missing
'u'.
Technically also fixes patch lookup and icon lookup with Portuguese,
though I doubt anyone has actually run into this issue.
|
|
gdbstub: Silence value truncation warning within FpuWrite()
|
|
- More accurate impl., fixes Undertale (among other games).
|
|
The opposite of the getter functions, this function sets the limit value
for a particular ResourceLimit resource category, with the restriction
that the new limit value must be equal to or greater than the current
resource value. If this is violated, then ERR_INVALID_STATE is returned.
e.g.
Assume:
current[Events] = 10;
limit[Events] = 20;
a call to this service function lowering the limit value to 10 would be
fine, however, attempting to lower it to 9 in this case would cause an
invalid state error.
|
|
This kernel service function is essentially the exact same as
svcGetResourceLimitLimitValue(), with the only difference being that it
retrieves the current value for a given resource category using the
provided resource limit handle, rather than retrieving the limiting
value of that resource limit instance.
Given these are exactly the same and only differ on returned values, we
can extract the existing code for svcGetResourceLimitLimitValue() to
handle both values.
|