Concessions To Reality
This commit is contained in:
parent
2d9659f273
commit
d52c16e722
2
dependencies/trampoline/src
vendored
2
dependencies/trampoline/src
vendored
@ -1 +1 @@
|
||||
Subproject commit 06e9f4d7c8505a1e8c8ec4d65e21e93161eae6f7
|
||||
Subproject commit 50d94d52998ba361c5d89d1b21f7eafd972f3f4e
|
@ -38,22 +38,30 @@ static uint32_t trampoline_pipe(const uint32_t id, const bool allow_early_return
|
||||
const trampoline_pipe_arguments cmd = {
|
||||
.id = id,
|
||||
.allow_early_return = allow_early_return,
|
||||
.length = length,
|
||||
.args_addr = uint32_t(args)
|
||||
.length = length
|
||||
};
|
||||
if (write(arguments_pipe, &cmd, sizeof(trampoline_pipe_arguments)) != sizeof(trampoline_pipe_arguments)) {
|
||||
ERR("Unable To Write Trampoline Command");
|
||||
}
|
||||
// Return
|
||||
if (length > 0 || !allow_early_return) {
|
||||
uint32_t ret;
|
||||
if (read(return_value_pipe, &ret, sizeof(uint32_t)) != sizeof(uint32_t)) {
|
||||
ERR("Unable To Read Trampoline Return Value");
|
||||
// Write Arguments
|
||||
size_t position = 0;
|
||||
while (position < length) {
|
||||
const ssize_t ret = write(arguments_pipe, args + position, length - position);
|
||||
if (ret == -1) {
|
||||
ERR("Unable To Write Trampoline Arguments");
|
||||
} else {
|
||||
position += ret;
|
||||
}
|
||||
return ret;
|
||||
} else {
|
||||
}
|
||||
if (allow_early_return) {
|
||||
return 0;
|
||||
}
|
||||
// Return
|
||||
uint32_t ret;
|
||||
if (read(return_value_pipe, &ret, sizeof(uint32_t)) != sizeof(uint32_t)) {
|
||||
ERR("Unable To Read Trampoline Return Value");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Main Function
|
||||
|
Loading…
Reference in New Issue
Block a user