cs: fix screenshot packet semantics

This commit is contained in:
Michael Scire 2021-07-28 21:52:55 -07:00
parent a4da7cc8bf
commit a5e761ceca
2 changed files with 18 additions and 8 deletions

View file

@ -18,17 +18,21 @@
namespace ams::scs {
struct CommandHeader {
u64 id;
struct alignas(alignof(u32)) CommandHeader {
u64 id __attribute__((packed));
u32 command;
u32 body_size;
};
static_assert(sizeof(CommandHeader) == 0x10);
static_assert(alignof(CommandHeader) == alignof(u32));
struct ResponseHeader {
u64 id;
struct alignas(alignof(u32)) ResponseHeader {
u64 id __attribute__((packed));
u32 response;
u32 body_size;
};
static_assert(sizeof(ResponseHeader) == 0x10);
static_assert(alignof(ResponseHeader) == alignof(u32));
class CommandProcessor {
protected:

View file

@ -109,11 +109,17 @@ namespace ams::cs {
.buffer_size = sizeof(g_data),
};
/* Acquire the send lock. */
auto lk = MakeSendGuardBlock();
/* Take the screenshot. */
const Result result = DoTakeScreenShotCommand(params);
Result result;
{
/* Acquire the send lock. */
auto lk = MakeSendGuardBlock();
/* Perform the command. */
result = DoTakeScreenShotCommand(params);
}
/* Handle the error case. */
if (R_FAILED(result)) {
SendErrorResult(socket, header, result);
}