From 324f488f5b0a6b5ce841e0f780f5cd595b1d34bf Mon Sep 17 00:00:00 2001 From: Lawrence Lee <45837045+Lawrence37@users.noreply.github.com> Date: Sat, 1 Jun 2024 18:59:42 -0700 Subject: [PATCH] Fix jpg file not writable after save Use a unique_ptr to automatically close the jpg file after. --- rtengine/imageio.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/rtengine/imageio.cc b/rtengine/imageio.cc index f096213dc..85afb08ea 100644 --- a/rtengine/imageio.cc +++ b/rtengine/imageio.cc @@ -480,7 +480,11 @@ int ImageIO::loadJPEGFromMemory (const char* buffer, int bufsize) int ImageIO::loadJPEG (const Glib::ustring &fname) { - FILE *file = g_fopen(fname.c_str (), "rb"); + std::unique_ptr file( + g_fopen(fname.c_str(), "rb"), + [](FILE *f) { + fclose(f); + }); if (!file) { return IMIO_CANNOTREADFILE; @@ -491,7 +495,7 @@ int ImageIO::loadJPEG (const Glib::ustring &fname) cinfo.err = my_jpeg_std_error(&jerr); jpeg_create_decompress(&cinfo); - my_jpeg_stdio_src (&cinfo, file); + my_jpeg_stdio_src (&cinfo, file.get()); #if defined( _WIN32 ) && defined( __x86_64__ ) && !defined(__clang__) if ( __builtin_setjmp((reinterpret_cast(cinfo.src))->error_jmp_buf) == 0 ) { @@ -553,7 +557,7 @@ int ImageIO::loadJPEG (const Glib::ustring &fname) jpeg_finish_decompress(&cinfo); jpeg_destroy_decompress(&cinfo); - fclose(file); + file.reset(); if (pl) { pl->setProgressStr ("PROGRESSBAR_READY");