int cellFontOpenFontFile(mem_ptr_t<CellFontLibrary> library, mem8_ptr_t fontPath, u32 subNum, s32 uniqueId, mem_ptr_t<CellFont> font) { cellFont.Warning("cellFontOpenFontFile(library_addr=0x%x, fontPath=\"%s\", subNum=%d, uniqueId=%d, font_addr=0x%x)", library.GetAddr(), fontPath.GetString(), subNum, uniqueId, font.GetAddr()); vfsFile f(fontPath.GetString()); if (!f.IsOpened()) return CELL_FONT_ERROR_FONT_OPEN_FAILED; u32 fileSize = f.GetSize(); MemoryAllocator<u8> buffer(fileSize); f.Read(Memory.VirtualToRealAddr(buffer.GetAddr()), fileSize); cellFontOpenFontMemory(library.GetAddr(), buffer.GetAddr(), fileSize, subNum, uniqueId, font.GetAddr()); return CELL_FONT_OK; }
int cellFontOpenFontFile(mem_ptr_t<CellFontLibrary> library, mem8_ptr_t fontPath, u32 subNum, s32 uniqueId, mem_ptr_t<CellFont> font) { std::string fp(fontPath.GetString()); cellFont->Warning("cellFontOpenFontFile(library_addr=0x%x, fontPath=\"%s\", subNum=%d, uniqueId=%d, font_addr=0x%x)", library.GetAddr(), fp.c_str(), subNum, uniqueId, font.GetAddr()); vfsFile f(fp); if (!f.IsOpened()) return CELL_FONT_ERROR_FONT_OPEN_FAILED; u32 fileSize = f.GetSize(); u32 bufferAddr = Memory.Alloc(fileSize, 1); // Freed in cellFontCloseFont f.Read(Memory.VirtualToRealAddr(bufferAddr), fileSize); int ret = cellFontOpenFontMemory(library.GetAddr(), bufferAddr, fileSize, subNum, uniqueId, font.GetAddr()); font->origin = CELL_FONT_OPEN_FONT_FILE; return ret; }