[glibmm] Gio: Fix ownership of some lists and arrays



commit b704f5a10edb43c128cf759ea38a3e98185c8b40
Author: Kjell Ahlstedt <kjellahlstedt gmail com>
Date:   Sun Jul 21 13:38:43 2019 +0200

    Gio: Fix ownership of some lists and arrays
    
    * gio/src/drive.hg: get_volumes(): Glib::OWNERSHIP_SHALLOW -> DEEP
    * gio/src/mountoperation.hg: signal_ask_question(): DEEP -> NONE
    A signal handler shall not deallocate its input data.
    * gio/src/themedicon.hg: get_names(): DEEP -> NONE
    * gio/src/tlsdatabase.[ccg|hg]: lookup_certificates_issued_by[_finish]_vfunc():
    g_list_copy() -> g_list_copy_deep()
    * gio/src/volumemonitor.hg: get_connected_drives(), get_volumes(),
    get_mounts(): SHALLOW -> DEEP

 gio/src/drive.hg          |  2 +-
 gio/src/mountoperation.hg |  2 +-
 gio/src/themedicon.hg     |  2 +-
 gio/src/tlsdatabase.ccg   | 10 +++++++++-
 gio/src/tlsdatabase.hg    | 51 ++++++++++++++++++++++++++++++++---------------
 gio/src/volumemonitor.hg  |  6 +++---
 6 files changed, 50 insertions(+), 23 deletions(-)
---
diff --git a/gio/src/drive.hg b/gio/src/drive.hg
index 23ad141c..a89974aa 100644
--- a/gio/src/drive.hg
+++ b/gio/src/drive.hg
@@ -60,7 +60,7 @@ public:
 
   _WRAP_METHOD(bool has_volumes() const, g_drive_has_volumes)
 
-#m4 
_CONVERSION(`GList*',`std::vector<Glib::RefPtr<Volume>>',`Glib::ListHandler<Glib::RefPtr<Volume>>::list_to_vector($3,
 Glib::OWNERSHIP_SHALLOW)')
+#m4 
_CONVERSION(`GList*',`std::vector<Glib::RefPtr<Volume>>',`Glib::ListHandler<Glib::RefPtr<Volume>>::list_to_vector($3,
 Glib::OWNERSHIP_DEEP)')
   _WRAP_METHOD(std::vector<Glib::RefPtr<Volume>> get_volumes(), g_drive_get_volumes)
 
   _WRAP_METHOD(bool is_media_removable() const, g_drive_is_media_removable)
diff --git a/gio/src/mountoperation.hg b/gio/src/mountoperation.hg
index cf16c62f..9a19e001 100644
--- a/gio/src/mountoperation.hg
+++ b/gio/src/mountoperation.hg
@@ -79,7 +79,7 @@ public:
 
   //TODO: We really need some test to make sure that our use of ArrayHandler is correct. murrayc.
 #m4 _CONVERSION(`const std::vector<Glib::ustring>&',`const gchar**',`const_cast<const 
gchar**>(Glib::ArrayHandler<Glib::ustring>::vector_to_array($3).data())')
-#m4 _CONVERSION(`const gchar**',`const 
std::vector<Glib::ustring>&',`Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, Glib::OWNERSHIP_DEEP)')
+#m4 _CONVERSION(`const gchar**',`const 
std::vector<Glib::ustring>&',`Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, Glib::OWNERSHIP_NONE)')
   _WRAP_SIGNAL(void ask_question(const Glib::ustring& message, const std::vector<Glib::ustring>& choices), 
ask_question)
 
   _WRAP_SIGNAL(void reply(MountOperationResult result), reply)
diff --git a/gio/src/themedicon.hg b/gio/src/themedicon.hg
index 9020e35f..1d9974bb 100644
--- a/gio/src/themedicon.hg
+++ b/gio/src/themedicon.hg
@@ -92,7 +92,7 @@ public:
   _WRAP_METHOD(void prepend_name(const Glib::ustring& iconname), g_themed_icon_prepend_name)
   _WRAP_METHOD(void append_name(const Glib::ustring& iconname), g_themed_icon_append_name)
 
-  #m4 _CONVERSION(`const gchar* 
const*',`std::vector<Glib::ustring>',`Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, 
Glib::OWNERSHIP_DEEP)')
+  #m4 _CONVERSION(`const gchar* 
const*',`std::vector<Glib::ustring>',`Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, 
Glib::OWNERSHIP_NONE)')
   _WRAP_METHOD(std::vector<Glib::ustring> get_names() const, g_themed_icon_get_names)
 
   //There are no signals.
diff --git a/gio/src/tlsdatabase.ccg b/gio/src/tlsdatabase.ccg
index 4b360575..f351f208 100644
--- a/gio/src/tlsdatabase.ccg
+++ b/gio/src/tlsdatabase.ccg
@@ -21,6 +21,14 @@
 #include <giomm/tlsinteraction.h>
 #include "slot_async.h"
 
-
 using VerifyFlags = Gio::TlsDatabase::VerifyFlags;
 using LookupFlags = Gio::TlsDatabase::LookupFlags;
+
+namespace
+{
+// Used in call to g_list_copy_deep().
+void* list_copy_ref(const void* src, void* /* data */)
+{
+  return g_object_ref(const_cast<void*>(src));
+}
+} // anonymous namespace
diff --git a/gio/src/tlsdatabase.hg b/gio/src/tlsdatabase.hg
index 773e6c91..571ff7dd 100644
--- a/gio/src/tlsdatabase.hg
+++ b/gio/src/tlsdatabase.hg
@@ -92,8 +92,8 @@ protected:
 #m4 _CONVERSION(`GSocketConnectable*',`const Glib::RefPtr<const SocketConnectable>&',`Glib::wrap($3, true)')
 #m4 _CONVERSION(`GTlsInteraction*',`const Glib::RefPtr<TlsInteraction>&',`Glib::wrap($3, true)')
 
-  _WRAP_VFUNC(TlsCertificateFlags verify_chain(const Glib::RefPtr<TlsCertificate>& chain, const 
Glib::ustring& purpose, const Glib::RefPtr<const SocketConnectable>& identity, const 
Glib::RefPtr<TlsInteraction>& interaction, const Glib::RefPtr<Cancellable>& cancellable{.?}, VerifyFlags 
flags{.}) const, "verify_chain", errthrow)
-  _WRAP_VFUNC(void verify_chain_async(const Glib::RefPtr<TlsCertificate>& chain, const Glib::ustring& 
purpose, const Glib::RefPtr<const SocketConnectable>& identity, const Glib::RefPtr<TlsInteraction>& 
interaction, const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.?}, 
VerifyFlags flags{.}) const, "verify_chain_async", slot_name slot, slot_callback SignalProxy_async_callback)
+  _WRAP_VFUNC(TlsCertificateFlags verify_chain(const Glib::RefPtr<TlsCertificate>& chain, const 
Glib::ustring& purpose, const Glib::RefPtr<const SocketConnectable>& identity, const 
Glib::RefPtr<TlsInteraction>& interaction, const Glib::RefPtr<Cancellable>& cancellable{.}, VerifyFlags 
flags{.}) const, "verify_chain", errthrow)
+  _WRAP_VFUNC(void verify_chain_async(const Glib::RefPtr<TlsCertificate>& chain, const Glib::ustring& 
purpose, const Glib::RefPtr<const SocketConnectable>& identity, const Glib::RefPtr<TlsInteraction>& 
interaction, const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.}, 
VerifyFlags flags{.}) const, "verify_chain_async", slot_name slot, slot_callback SignalProxy_async_callback)
 
 #m4 _CONVERSION(`GAsyncResult*',`const Glib::RefPtr<AsyncResult>&',`Glib::wrap($3, true)')
 
@@ -107,22 +107,41 @@ dnl// because that could be caused by an intermediate empty ustring from an init
 #m4 _CONVERSION(`gchar*',`Glib::ustring',`Glib::convert_return_gchar_ptr_to_ustring($3)')
   _WRAP_VFUNC(Glib::ustring create_certificate_handle(const Glib::RefPtr<const TlsCertificate>& certificate) 
const, "create_certificate_handle")
 
-#m4 
_CONVERSION(`Glib::RefPtr<TlsCertificate>',`GTlsCertificate*',`G_TLS_CERTIFICATE(g_object_ref(Glib::unwrap($3)))')
-
-  _WRAP_VFUNC(Glib::RefPtr<TlsCertificate> lookup_certificate_for_handle(const Glib::ustring& handle, const 
Glib::RefPtr<TlsInteraction>& interaction, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags 
flags{.}), "lookup_certificate_for_handle", errthrow)
-  _WRAP_VFUNC(void lookup_certificate_for_handle_async(const Glib::ustring& handle, const 
Glib::RefPtr<TlsInteraction>& interaction, const SlotAsyncReady& slot{callback}, const 
Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.}), "lookup_certificate_for_handle_async", 
slot_name slot, slot_callback SignalProxy_async_callback)
-  _WRAP_VFUNC(Glib::RefPtr<TlsCertificate> lookup_certificate_for_handle_finish(const 
Glib::RefPtr<AsyncResult>& result), "lookup_certificate_for_handle_finish", errthrow)
-
-  _WRAP_VFUNC(Glib::RefPtr<TlsCertificate> lookup_certificate_issuer(const Glib::RefPtr<TlsCertificate>& 
certificate, const Glib::RefPtr<TlsInteraction>& interaction, const Glib::RefPtr<Cancellable>& 
cancellable{.?}, LookupFlags flags{.}), "lookup_certificate_issuer", errthrow)
-  _WRAP_VFUNC(void lookup_certificate_issuer_async(const Glib::RefPtr<TlsCertificate>& certificate, const 
Glib::RefPtr<TlsInteraction>& interaction, const SlotAsyncReady& slot{callback}, const 
Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.}), "lookup_certificate_issuer_async", 
slot_name slot, slot_callback SignalProxy_async_callback)
-  _WRAP_VFUNC(Glib::RefPtr<TlsCertificate> lookup_certificate_issuer_finish(const Glib::RefPtr<AsyncResult>& 
result), "lookup_certificate_issuer_finish", errthrow)
-
-#m4 _CONVERSION(`std::vector< Glib::RefPtr<TlsCertificate> >',`GList*',`g_list_copy(Glib::ListHandler< 
Glib::RefPtr<TlsCertificate> >::vector_to_list($3).data())')
+  _WRAP_VFUNC(Glib::RefPtr<TlsCertificate> lookup_certificate_for_handle(
+    const Glib::ustring& handle, const Glib::RefPtr<TlsInteraction>& interaction,
+    const Glib::RefPtr<Cancellable>& cancellable{.}, LookupFlags flags{.}),
+    "lookup_certificate_for_handle", errthrow, refreturn_ctype)
+  _WRAP_VFUNC(void lookup_certificate_for_handle_async(
+    const Glib::ustring& handle, const Glib::RefPtr<TlsInteraction>& interaction,
+    const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.}, LookupFlags 
flags{.}),
+    "lookup_certificate_for_handle_async", slot_name slot, slot_callback SignalProxy_async_callback)
+  _WRAP_VFUNC(Glib::RefPtr<TlsCertificate> lookup_certificate_for_handle_finish(
+    const Glib::RefPtr<AsyncResult>& result), "lookup_certificate_for_handle_finish", errthrow, 
refreturn_ctype)
+
+  _WRAP_VFUNC(Glib::RefPtr<TlsCertificate> lookup_certificate_issuer(
+    const Glib::RefPtr<TlsCertificate>& certificate, const Glib::RefPtr<TlsInteraction>& interaction,
+    const Glib::RefPtr<Cancellable>& cancellable{.}, LookupFlags flags{.}),
+    "lookup_certificate_issuer", errthrow, refreturn_ctype)
+  _WRAP_VFUNC(void lookup_certificate_issuer_async(
+    const Glib::RefPtr<TlsCertificate>& certificate, const Glib::RefPtr<TlsInteraction>& interaction,
+    const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.}, LookupFlags 
flags{.}),
+    "lookup_certificate_issuer_async", slot_name slot, slot_callback SignalProxy_async_callback)
+  _WRAP_VFUNC(Glib::RefPtr<TlsCertificate> lookup_certificate_issuer_finish(
+    const Glib::RefPtr<AsyncResult>& result), "lookup_certificate_issuer_finish", errthrow, refreturn_ctype)
+
+#m4 _CONVERSION(`std::vector< Glib::RefPtr<TlsCertificate> >',`GList*',
+#m4  `g_list_copy_deep(Glib::ListHandler< Glib::RefPtr<TlsCertificate> >::vector_to_list($3).data(), 
list_copy_ref, nullptr)')
 #m4 _CONVERSION(`GByteArray*',`const Glib::RefPtr<Glib::ByteArray>&',`Glib::wrap($3, true)')
 
-  _WRAP_VFUNC(std::vector< Glib::RefPtr<TlsCertificate> > lookup_certificates_issued_by(const 
Glib::RefPtr<Glib::ByteArray>& issuer_raw_dn, const Glib::RefPtr<TlsInteraction>& interaction, const 
Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.}), "lookup_certificates_issued_by", errthrow)
-  _WRAP_VFUNC(void lookup_certificates_issued_by_async(const Glib::RefPtr<Glib::ByteArray>& issuer_raw_dn, 
const Glib::RefPtr<TlsInteraction>& interaction, const SlotAsyncReady& slot{callback}, const 
Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.}), "lookup_certificates_issued_by_async", 
slot_name slot, slot_callback SignalProxy_async_callback)
-  _WRAP_VFUNC(std::vector< Glib::RefPtr<TlsCertificate> > lookup_certificates_issued_by_finish(const 
Glib::RefPtr<AsyncResult>& result), "lookup_certificates_issued_by_finish", errthrow)
+  _WRAP_VFUNC(std::vector< Glib::RefPtr<TlsCertificate> > lookup_certificates_issued_by(
+    const Glib::RefPtr<Glib::ByteArray>& issuer_raw_dn, const Glib::RefPtr<TlsInteraction>& interaction,
+    const Glib::RefPtr<Cancellable>& cancellable{.}, LookupFlags flags{.}), "lookup_certificates_issued_by", 
errthrow)
+  _WRAP_VFUNC(void lookup_certificates_issued_by_async(
+    const Glib::RefPtr<Glib::ByteArray>& issuer_raw_dn, const Glib::RefPtr<TlsInteraction>& interaction,
+    const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.}, LookupFlags 
flags{.}),
+    "lookup_certificates_issued_by_async", slot_name slot, slot_callback SignalProxy_async_callback)
+  _WRAP_VFUNC(std::vector< Glib::RefPtr<TlsCertificate> > lookup_certificates_issued_by_finish(
+    const Glib::RefPtr<AsyncResult>& result), "lookup_certificates_issued_by_finish", errthrow)
 };
 
 } // namespace Gio
diff --git a/gio/src/volumemonitor.hg b/gio/src/volumemonitor.hg
index bba03cce..2449a4db 100644
--- a/gio/src/volumemonitor.hg
+++ b/gio/src/volumemonitor.hg
@@ -42,13 +42,13 @@ public:
 
   _WRAP_METHOD(static Glib::RefPtr<VolumeMonitor> get(), g_volume_monitor_get)
 
-#m4 
_CONVERSION(`GList*',`std::vector<Glib::RefPtr<Drive>>',`Glib::ListHandler<Glib::RefPtr<Drive>>::list_to_vector($3,
 Glib::OWNERSHIP_SHALLOW)')
+#m4 
_CONVERSION(`GList*',`std::vector<Glib::RefPtr<Drive>>',`Glib::ListHandler<Glib::RefPtr<Drive>>::list_to_vector($3,
 Glib::OWNERSHIP_DEEP)')
   _WRAP_METHOD(std::vector<Glib::RefPtr<Drive>> get_connected_drives(), 
g_volume_monitor_get_connected_drives)
 
-#m4 
_CONVERSION(`GList*',`std::vector<Glib::RefPtr<Volume>>',`Glib::ListHandler<Glib::RefPtr<Volume>>::list_to_vector($3,
 Glib::OWNERSHIP_SHALLOW)')
+#m4 
_CONVERSION(`GList*',`std::vector<Glib::RefPtr<Volume>>',`Glib::ListHandler<Glib::RefPtr<Volume>>::list_to_vector($3,
 Glib::OWNERSHIP_DEEP)')
   _WRAP_METHOD(std::vector<Glib::RefPtr<Volume>> get_volumes(), g_volume_monitor_get_volumes)
 
-#m4 
_CONVERSION(`GList*',`std::vector<Glib::RefPtr<Mount>>',`Glib::ListHandler<Glib::RefPtr<Mount>>::list_to_vector($3,
 Glib::OWNERSHIP_SHALLOW)')
+#m4 
_CONVERSION(`GList*',`std::vector<Glib::RefPtr<Mount>>',`Glib::ListHandler<Glib::RefPtr<Mount>>::list_to_vector($3,
 Glib::OWNERSHIP_DEEP)')
   _WRAP_METHOD(std::vector<Glib::RefPtr<Mount>> get_mounts(), g_volume_monitor_get_mounts)
 
   _WRAP_METHOD(Glib::RefPtr<Volume> get_volume_for_uuid(const std::string& uuid), 
g_volume_monitor_get_volume_for_uuid, refreturn)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]