erpt: update for 11.0.0 (closes #1218)
This commit is contained in:
@@ -37,18 +37,32 @@ namespace ams::erpt::srv {
|
||||
static ValueTypeTag GetTag(u32) { return ValueTypeTag::U32; }
|
||||
static ValueTypeTag GetTag(u64) { return ValueTypeTag::U64; }
|
||||
|
||||
static Result AddStringValue(Report *report, const char *str, u32 len) {
|
||||
const u32 str_len = str != nullptr ? static_cast<u32>(strnlen(str, len)) : 0;
|
||||
|
||||
if (str_len < ElementSize_32) {
|
||||
R_TRY(report->Write(static_cast<u8>(static_cast<u8>(ValueTypeTag::FixStr) | str_len)));
|
||||
} else if (str_len < ElementSize_256) {
|
||||
R_TRY(report->Write(static_cast<u8>(ValueTypeTag::Str8)));
|
||||
R_TRY(report->Write(static_cast<u8>(str_len)));
|
||||
} else {
|
||||
R_UNLESS(str_len < ElementSize_16384, erpt::ResultFormatterError());
|
||||
R_TRY(report->Write(static_cast<u8>(ValueTypeTag::Str16)));
|
||||
|
||||
u16 be_str_len;
|
||||
util::StoreBigEndian(std::addressof(be_str_len), static_cast<u16>(str_len));
|
||||
R_TRY(report->Write(be_str_len));
|
||||
}
|
||||
|
||||
R_TRY(report->Write(str, str_len));
|
||||
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
static Result AddId(Report *report, FieldId field_id) {
|
||||
static_assert(MaxFieldStringSize < ElementSize_256);
|
||||
|
||||
const u32 field_len = static_cast<u32>(strnlen(FieldString[field_id], MaxFieldStringSize));
|
||||
if (field_len < ElementSize_32) {
|
||||
R_TRY(report->Write(static_cast<u8>(static_cast<u8>(ValueTypeTag::FixStr) | field_len)));
|
||||
} else {
|
||||
R_TRY(report->Write(static_cast<u8>(ValueTypeTag::Str8)));
|
||||
R_TRY(report->Write(static_cast<u8>(field_len)));
|
||||
}
|
||||
|
||||
R_TRY(report->Write(FieldString[field_id], field_len));
|
||||
R_TRY(AddStringValue(report, FieldString[field_id], strnlen(FieldString[field_id], MaxFieldStringSize)));
|
||||
|
||||
return ResultSuccess();
|
||||
}
|
||||
@@ -140,23 +154,7 @@ namespace ams::erpt::srv {
|
||||
static Result AddField(Report *report, FieldId field_id, char *str, u32 len) {
|
||||
R_TRY(AddId(report, field_id));
|
||||
|
||||
const u32 str_len = str != nullptr ? static_cast<u32>(strnlen(str, len)) : 0;
|
||||
|
||||
if (str_len < ElementSize_32) {
|
||||
R_TRY(report->Write(static_cast<u8>(static_cast<u8>(ValueTypeTag::FixStr) | str_len)));
|
||||
} else if (str_len < ElementSize_256) {
|
||||
R_TRY(report->Write(static_cast<u8>(ValueTypeTag::Str8)));
|
||||
R_TRY(report->Write(static_cast<u8>(str_len)));
|
||||
} else {
|
||||
R_UNLESS(str_len < ElementSize_16384, erpt::ResultFormatterError());
|
||||
R_TRY(report->Write(static_cast<u8>(ValueTypeTag::Str16)));
|
||||
|
||||
u16 be_str_len;
|
||||
util::StoreBigEndian(std::addressof(be_str_len), static_cast<u16>(str_len));
|
||||
R_TRY(report->Write(be_str_len));
|
||||
}
|
||||
|
||||
R_TRY(report->Write(str, str_len));
|
||||
R_TRY(AddStringValue(report, str, len));
|
||||
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user