Cleanup: add BLI_mmap_get_length, remove duplicate file size access

Remove unnecessary calls to BLI_file_descriptor_size when using
BLI_mmap_open since this stores the file size too.

While accessing the size twice isn't so bad, the additional check
that the file size isn't an error value is unnecessarily verbose.
This commit is contained in:
Campbell Barton
2023-10-10 15:37:35 +11:00
parent ed8d2d8219
commit 4afd8ef9a4
6 changed files with 10 additions and 18 deletions

View File

@@ -33,6 +33,7 @@ bool BLI_mmap_read(BLI_mmap_file *file, void *dest, size_t offset, size_t length
ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
void *BLI_mmap_get_pointer(BLI_mmap_file *file) ATTR_WARN_UNUSED_RESULT;
size_t BLI_mmap_get_length(const BLI_mmap_file *file) ATTR_WARN_UNUSED_RESULT;
void BLI_mmap_free(BLI_mmap_file *file) ATTR_NONNULL(1);

View File

@@ -213,6 +213,11 @@ void *BLI_mmap_get_pointer(BLI_mmap_file *file)
return file->memory;
}
size_t BLI_mmap_get_length(const BLI_mmap_file *file)
{
return file->length;
}
void BLI_mmap_free(BLI_mmap_file *file)
{
#ifndef WIN32

View File

@@ -120,7 +120,7 @@ FileReader *BLI_filereader_new_mmap(int filedes)
MemoryReader *mem = MEM_callocN(sizeof(MemoryReader), __func__);
mem->mmap = mmap;
mem->length = BLI_lseek(filedes, 0, SEEK_END);
mem->length = BLI_mmap_get_length(mmap);
mem->reader.read = memory_read_mmap;
mem->reader.seek = memory_seek;

View File

@@ -157,14 +157,7 @@ class IMMapStream : public Imf::IStream {
if (file < 0) {
throw IEX_NAMESPACE::InputExc("file not found");
}
const size_t file_size = BLI_file_descriptor_size(file);
if (UNLIKELY(file_size == size_t(-1))) {
close(file);
throw IEX_NAMESPACE::InputExc("file size could not be accessed");
}
_exrpos = 0;
_exrsize = file_size;
imb_mmap_lock();
_mmap_file = BLI_mmap_open(file);
imb_mmap_unlock();
@@ -173,6 +166,7 @@ class IMMapStream : public Imf::IStream {
throw IEX_NAMESPACE::InputExc("BLI_mmap_open failed");
}
_exrbuf = (uchar *)BLI_mmap_get_pointer(_mmap_file);
_exrsize = BLI_mmap_get_length(_mmap_file);
}
~IMMapStream() override

View File

@@ -124,11 +124,6 @@ ImBuf *IMB_loadifffile(int file, int flags, char colorspace[IM_MAX_SPACE], const
return nullptr;
}
const size_t size = BLI_file_descriptor_size(file);
if (size == size_t(-1)) {
return nullptr;
}
imb_mmap_lock();
BLI_mmap_file *mmap_file = BLI_mmap_open(file);
imb_mmap_unlock();
@@ -138,6 +133,7 @@ ImBuf *IMB_loadifffile(int file, int flags, char colorspace[IM_MAX_SPACE], const
}
mem = static_cast<uchar *>(BLI_mmap_get_pointer(mmap_file));
const size_t size = BLI_mmap_get_length(mmap_file);
ibuf = IMB_ibImageFromMemory(mem, size, flags, colorspace, descr);

View File

@@ -88,11 +88,6 @@ ImBuf *imb_load_filepath_thumbnail_webp(const char *filepath,
return nullptr;
}
const size_t data_size = BLI_file_descriptor_size(file);
if (UNLIKELY(data_size == size_t(-1))) {
return nullptr;
}
imb_mmap_lock();
BLI_mmap_file *mmap_file = BLI_mmap_open(file);
imb_mmap_unlock();
@@ -102,6 +97,7 @@ ImBuf *imb_load_filepath_thumbnail_webp(const char *filepath,
}
const uchar *data = static_cast<const uchar *>(BLI_mmap_get_pointer(mmap_file));
const size_t data_size = BLI_mmap_get_length(mmap_file);
WebPDecoderConfig config;
if (!data || !WebPInitDecoderConfig(&config) ||