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:
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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) ||
|
||||
|
||||
Reference in New Issue
Block a user