clang-tidy: readability-non-const-parameter
[geeqie.git] / src / exiv2.cc
index a6402f1..b41db97 100644 (file)
 #include "main.h"
 #include "exif.h"
 
+#include "filedata.h"
 #include "filefilter.h"
-#include "ui-fileops.h"
-
 #include "misc.h"
+#include "ui-fileops.h"
 
 #if EXIV2_TEST_VERSION(0,28,0)
 #define AnyError Error
@@ -122,7 +122,7 @@ struct ExifData
 
        virtual ~ExifData() = default;
 
-       virtual void writeMetadata(gchar *UNUSED(path) = nullptr)
+       virtual void writeMetadata(gchar * = nullptr)
        {
                g_critical("Unsupported method of writing metadata");
        }
@@ -762,7 +762,7 @@ guint exif_item_get_format_id(ExifItem *item)
        }
 }
 
-const char *exif_item_get_format_name(ExifItem *item, gboolean UNUSED(brief))
+const char *exif_item_get_format_name(ExifItem *item, gboolean)
 {
        try {
                if (!item) return nullptr;
@@ -1219,19 +1219,13 @@ guchar *exif_get_preview(ExifData *exif, guint *data_len, gint requested_width,
 
                        Exiv2::PreviewImage image = pm.getPreviewImage(*pos);
 
-                       Exiv2::DataBuf buf = image.copy();
-
-#if EXIV2_TEST_VERSION(0,28,0)
-                       *data_len = buf.size();
-                       auto b = buf.data();
-                       buf.reset();
-                       return b;
-#else
-                       std::pair<Exiv2::byte*, long> p = buf.release();
-
-                       *data_len = p.second;
-                       return p.first;
-#endif
+                       // Let's not touch data_len until we finish copy.
+                       // Just in case we run into OOM.
+                       size_t img_sz = image.size();
+                       auto* b = new Exiv2::byte[img_sz];
+                       std::copy_n(image.pData(), img_sz, b);
+                       *data_len = img_sz;
+                       return b;
                        }
                return nullptr;
        }
@@ -1241,7 +1235,7 @@ guchar *exif_get_preview(ExifData *exif, guint *data_len, gint requested_width,
        }
 }
 
-void exif_free_preview(guchar *buf)
+void exif_free_preview(const guchar *buf)
 {
        delete[] static_cast<Exiv2::byte*>(buf);
 }