Account empty EDAT (#11146)

* Improve sys_fs_open logging
This commit is contained in:
Eladash 2021-11-14 01:15:27 +02:00 committed by GitHub
parent 48ad959697
commit cfe08de951
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 24 deletions

View file

@ -936,7 +936,7 @@ bool EDATADecrypter::ReadHeader()
// Try decrypting the first block instead // Try decrypting the first block instead
u8 data_sample[1]; u8 data_sample[1];
if (!ReadData(0, data_sample, 1)) if (file_size && !ReadData(0, data_sample, 1))
{ {
return false; return false;
} }

View file

@ -51,16 +51,15 @@ void fmt_class_string<lv2_file>::format(std::string& out, u64 arg)
return "N/A"; return "N/A";
} }
std::string size_str = fmt::format("0x%05x ", size); std::string size_str;
switch (std::bit_width(size) / 10 * 10) switch (std::bit_width(size) / 10 * 10)
{ {
case 64: size_str = "0"s; break; case 0: fmt::append(size_str, "%u", size); break;
case 0: fmt::append(size_str, "(%u)", size); break; case 10: fmt::append(size_str, "%gKB", size / 1024.); break;
case 10: fmt::append(size_str, "(%gKB)", size / 1024.); break; case 20: fmt::append(size_str, "%gMB", size / (1024. * 1024)); break;
case 20: fmt::append(size_str, "(%gMB)", size / (1024. * 1024)); break;
default: default:
case 30: fmt::append(size_str, "(%gGB)", size / (1024. * 1024 * 1024)); break; case 30: fmt::append(size_str, "%gGB", size / (1024. * 1024 * 1024)); break;
} }
return size_str; return size_str;
@ -69,7 +68,7 @@ void fmt_class_string<lv2_file>::format(std::string& out, u64 arg)
const usz pos = file.file ? file.file.pos() : umax; const usz pos = file.file ? file.file.pos() : umax;
const usz size = file.file ? file.file.size() : umax; const usz size = file.file ? file.file.size() : umax;
fmt::append(out, u8"%s, “%s”, Mode: 0x%x, Flags: 0x%x, Pos: %s, Size: %s", file.type, file.name.data(), file.mode, file.flags, get_size(pos), get_size(size)); fmt::append(out, u8"%s, “%s”, Mode: 0x%x, Flags: 0x%x, Pos/Size: %s/%s (0x%x/0x%x)", file.type, file.name.data(), file.mode, file.flags, get_size(pos), get_size(size), pos, size);
} }
template<> template<>
@ -616,29 +615,23 @@ error_code sys_fs_open(ppu_thread& ppu, vm::cptr<char> path, s32 flags, vm::ptr<
return {error, path}; return {error, path};
} }
if (type >= lv2_file_type::sdata)
{
sys_fs.warning("sys_fs_open(): NPDRM detected");
if (const u32 id = idm::import<lv2_fs_object, lv2_file>([&ppath = ppath, &file = file, mode, flags, &real = real, &type = type]() -> std::shared_ptr<lv2_file> if (const u32 id = idm::import<lv2_fs_object, lv2_file>([&ppath = ppath, &file = file, mode, flags, &real = real, &type = type]() -> std::shared_ptr<lv2_file>
{ {
if (!g_fxo->get<loaded_npdrm_keys>().npdrm_fds.try_inc(16)) std::shared_ptr<lv2_file> result;
if (type >= lv2_file_type::sdata && !g_fxo->get<loaded_npdrm_keys>().npdrm_fds.try_inc(16))
{ {
return nullptr; return result;
} }
return std::make_shared<lv2_file>(ppath, std::move(file), mode, flags, real, type); result = std::make_shared<lv2_file>(ppath, std::move(file), mode, flags, real, type);
sys_fs.warning("sys_fs_open(): fd=%u, %s", idm::last_id(), *result);
return result;
})) }))
{ {
*fd = id; *fd = id;
return CELL_OK; return CELL_OK;
} }
}
else if (const u32 id = idm::make<lv2_fs_object, lv2_file>(ppath, std::move(file), mode, flags, real))
{
*fd = id;
return CELL_OK;
}
// Out of file descriptors // Out of file descriptors
return {CELL_EMFILE, path}; return {CELL_EMFILE, path};
@ -839,7 +832,7 @@ error_code sys_fs_close(ppu_thread& ppu, u32 fd)
return {CELL_EBADF, fd}; return {CELL_EBADF, fd};
} }
sys_fs.warning("sys_fs_close(fd=%u): path='%s'", fd, file->name.data()); sys_fs.warning("sys_fs_close(fd=%u): %s", fd, *file);
if (file->lock == 1) if (file->lock == 1)
{ {