From f9acfa776d1486ca6546d001d542288b58705111 Mon Sep 17 00:00:00 2001 From: lifegpc Date: Thu, 3 Mar 2022 14:03:52 +0800 Subject: [PATCH] Fix test failed on linux --- exif/exif.h | 4 ++-- exif/src/exif.cpp | 14 ++++++++++---- src/exif.rs | 4 ++++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/exif/exif.h b/exif/exif.h index 359e1f6..e4614a6 100644 --- a/exif/exif.h +++ b/exif/exif.h @@ -31,8 +31,8 @@ EXIF_API int exif_image_write_metadata(ExifImage* image); EXIF_API void free_exif_image(ExifImage* img); EXIF_API ExifKey* exif_create_key_by_key(const char* key); EXIF_API ExifKey* exif_create_key_by_id(uint16_t id, const char* group_name); -EXIF_API const char* exif_get_key_key(ExifKey* key); -EXIF_API const char* exif_get_key_family_name(ExifKey* key); +EXIF_API char* exif_get_key_key(ExifKey* key); +EXIF_API char* exif_get_key_family_name(ExifKey* key); EXIF_API char* exif_get_key_group_name(ExifKey* key); EXIF_API char* exif_get_key_tag_name(ExifKey* key); EXIF_API uint16_t exif_get_key_tag_tag(ExifKey* key); diff --git a/exif/src/exif.cpp b/exif/src/exif.cpp index 6c6ffff..d7338a8 100644 --- a/exif/src/exif.cpp +++ b/exif/src/exif.cpp @@ -78,14 +78,20 @@ end: return nullptr; } -const char* exif_get_key_key(ExifKey* key) { +char* exif_get_key_key(ExifKey* key) { if (!key || !key->key) return nullptr; - return std::move(key->key->key().c_str()); + auto s = key->key->key(); + char* re = nullptr; + if (!string2char(s, re)) return nullptr; + return re; } -const char* exif_get_key_family_name(ExifKey* key) { +char* exif_get_key_family_name(ExifKey* key) { if (!key || !key->key) return nullptr; - return key->key->familyName(); + auto s = key->key->familyName(); + char* re = nullptr; + if (!string2char(s, re)) return nullptr; + return re; } char* exif_get_key_group_name(ExifKey* key) { diff --git a/src/exif.rs b/src/exif.rs index a96aa42..33175d1 100644 --- a/src/exif.rs +++ b/src/exif.rs @@ -163,6 +163,8 @@ impl ExifKey { return None; } let s = unsafe { CStr::from_ptr(r) }; + let s = s.to_owned(); + unsafe { _exif::exif_free(r as *mut ::std::os::raw::c_void) }; let s = s.to_str(); if s.is_err() { return None; @@ -181,6 +183,8 @@ impl ExifKey { return None; } let s = unsafe { CStr::from_ptr(r) }; + let s = s.to_owned(); + unsafe { _exif::exif_free(r as *mut ::std::os::raw::c_void) }; let s = s.to_str(); if s.is_err() { return None;