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 = {
|
const trampoline_pipe_arguments cmd = {
|
||||||
.id = id,
|
.id = id,
|
||||||
.allow_early_return = allow_early_return,
|
.allow_early_return = allow_early_return,
|
||||||
.length = length,
|
.length = length
|
||||||
.args_addr = uint32_t(args)
|
|
||||||
};
|
};
|
||||||
if (write(arguments_pipe, &cmd, sizeof(trampoline_pipe_arguments)) != sizeof(trampoline_pipe_arguments)) {
|
if (write(arguments_pipe, &cmd, sizeof(trampoline_pipe_arguments)) != sizeof(trampoline_pipe_arguments)) {
|
||||||
ERR("Unable To Write Trampoline Command");
|
ERR("Unable To Write Trampoline Command");
|
||||||
}
|
}
|
||||||
// Return
|
// Write Arguments
|
||||||
if (length > 0 || !allow_early_return) {
|
size_t position = 0;
|
||||||
uint32_t ret;
|
while (position < length) {
|
||||||
if (read(return_value_pipe, &ret, sizeof(uint32_t)) != sizeof(uint32_t)) {
|
const ssize_t ret = write(arguments_pipe, args + position, length - position);
|
||||||
ERR("Unable To Read Trampoline Return Value");
|
if (ret == -1) {
|
||||||
|
ERR("Unable To Write Trampoline Arguments");
|
||||||
|
} else {
|
||||||
|
position += ret;
|
||||||
}
|
}
|
||||||
return ret;
|
}
|
||||||
} else {
|
if (allow_early_return) {
|
||||||
return 0;
|
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
|
// Main Function
|
||||||
|
Loading…
Reference in New Issue
Block a user