1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 17:47:44 +00:00

Font: Clean up AK::MappedFile and use it for mapping font files.

This commit is contained in:
Andreas Kling 2019-04-03 13:51:49 +02:00
parent ab6bd3872b
commit 3dc3754cde
5 changed files with 48 additions and 37 deletions

View file

@ -2,7 +2,7 @@
#include <AK/kmalloc.h>
#include <AK/BufferStream.h>
#include <AK/StdLibExtras.h>
#include <AK/MappedFile.h>
#include <LibC/unistd.h>
#include <LibC/stdio.h>
#include <LibC/fcntl.h>
@ -90,10 +90,6 @@ Font::Font(const String& name, unsigned* rows, byte* widths, bool is_fixed_width
Font::~Font()
{
if (m_mmap_ptr) {
int rc = munmap(m_mmap_ptr, 4096 * 3);
ASSERT(rc == 0);
}
}
RetainPtr<Font> Font::load_from_memory(const byte* data)
@ -119,25 +115,12 @@ RetainPtr<Font> Font::load_from_memory(const byte* data)
RetainPtr<Font> Font::load_from_file(const String& path)
{
int fd = open(path.characters(), O_RDONLY, 0644);
if (fd < 0) {
dbgprintf("open(%s) got fd=%d, failed: %s\n", path.characters(), fd, strerror(errno));
perror("open");
MappedFile mapped_file(path);
if (!mapped_file.is_valid())
return nullptr;
}
auto* mapped_file = (byte*)mmap(nullptr, 4096 * 3, PROT_READ, MAP_SHARED, fd, 0);
if (mapped_file == MAP_FAILED) {
int rc = close(fd);
ASSERT(rc == 0);
return nullptr;
}
auto font = load_from_memory(mapped_file);
font->m_mmap_ptr = mapped_file;
int rc = close(fd);
ASSERT(rc == 0);
auto font = load_from_memory((const byte*)mapped_file.pointer());
font->m_mapped_file = move(mapped_file);
return font;
}