[glibmm/glibmm-2-60] Gio: Fix ownership of some lists and arrays



commit ad52f50f2c9bc2b11cbcec257491771972825087
Author: Kjell Ahlstedt <kjellahlstedt gmail com>
Date:   Sun Jul 21 16:00:29 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   |  9 +++++++++
 gio/src/tlsdatabase.hg    | 19 ++++++++++---------
 gio/src/volumemonitor.hg  |  6 +++---
 6 files changed, 25 insertions(+), 15 deletions(-)
---
diff --git a/gio/src/drive.hg b/gio/src/drive.hg
index 9593de9d..4871a3a2 100644
--- a/gio/src/drive.hg
+++ b/gio/src/drive.hg
@@ -61,7 +61,7 @@ public:
 
   _WRAP_METHOD(bool has_volumes() const, g_drive_has_volumes)
 
-#m4 _CONVERSION(`GList*',`Glib::ListHandle< Glib::RefPtr<Volume> >',`$2($3, Glib::OWNERSHIP_SHALLOW)')
+#m4 _CONVERSION(`GList*',`Glib::ListHandle< Glib::RefPtr<Volume> >',`$2($3, Glib::OWNERSHIP_DEEP)')
   _WRAP_METHOD(Glib::ListHandle< 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 1e69765e..99492b3b 100644
--- a/gio/src/mountoperation.hg
+++ b/gio/src/mountoperation.hg
@@ -80,7 +80,7 @@ public:
 
   //TODO: We really need some test to make sure that our use of StringArrayHandle is correct. murrayc.
 #m4 _CONVERSION(`const Glib::StringArrayHandle&',`const gchar**',`const_cast<const gchar**>(($3).data())')
-#m4 _CONVERSION(`const gchar**',`const Glib::StringArrayHandle&',`Glib::StringArrayHandle($3, 
Glib::OWNERSHIP_DEEP)')
+#m4 _CONVERSION(`const gchar**',`const Glib::StringArrayHandle&',`Glib::StringArrayHandle($3, 
Glib::OWNERSHIP_NONE)')
   _WRAP_SIGNAL(void ask_question(const Glib::ustring& message, const Glib::StringArrayHandle& choices), 
ask_question)
 
   _WRAP_SIGNAL(void reply(MountOperationResult result), reply)
diff --git a/gio/src/themedicon.hg b/gio/src/themedicon.hg
index 249b1d11..7aaf2332 100644
--- a/gio/src/themedicon.hg
+++ b/gio/src/themedicon.hg
@@ -96,7 +96,7 @@ public:
   _WRAP_METHOD(void prepend_name(const std::string& iconname), g_themed_icon_prepend_name)
   _WRAP_METHOD(void append_name(const std::string& iconname), g_themed_icon_append_name)
 
-  #m4 _CONVERSION(`const gchar* const*',`Glib::StringArrayHandle',`Glib::StringArrayHandle($3, 
Glib::OWNERSHIP_DEEP)')
+  #m4 _CONVERSION(`const gchar* const*',`Glib::StringArrayHandle',`Glib::StringArrayHandle($3, 
Glib::OWNERSHIP_NONE)')
   _WRAP_METHOD(Glib::StringArrayHandle 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 e464c170..80ef0a7e 100644
--- a/gio/src/tlsdatabase.ccg
+++ b/gio/src/tlsdatabase.ccg
@@ -20,3 +20,12 @@
 #include <giomm/tlscertificate.h>
 #include <giomm/tlsinteraction.h>
 #include "slot_async.h"
+
+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 52d1a25e..a99daaae 100644
--- a/gio/src/tlsdatabase.hg
+++ b/gio/src/tlsdatabase.hg
@@ -91,8 +91,8 @@ public:
 #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{.?}, 
TlsDatabaseVerifyFlags 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{.?}, 
TlsDatabaseVerifyFlags 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{.}, 
TlsDatabaseVerifyFlags 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{.}, 
TlsDatabaseVerifyFlags flags{.}) const, "verify_chain_async", slot_name slot, slot_callback 
SignalProxy_async_callback)
 
 #m4 _CONVERSION(`GAsyncResult*',`const Glib::RefPtr<AsyncResult>&',`Glib::wrap($3, true)')
 
@@ -105,19 +105,20 @@ dnl// create_certificate_handle_vfunc() shall return a newly allocated string.
 
 #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{.?}, 
TlsDatabaseLookupFlags 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{.?}, TlsDatabaseLookupFlags flags{.}), 
"lookup_certificate_for_handle_async", slot_name slot, slot_callback SignalProxy_async_callback)
+  _WRAP_VFUNC(Glib::RefPtr<TlsCertificate> lookup_certificate_for_handle(const Glib::ustring& handle, const 
Glib::RefPtr<TlsInteraction>& interaction, const Glib::RefPtr<Cancellable>& cancellable{.}, 
TlsDatabaseLookupFlags 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{.}, TlsDatabaseLookupFlags 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{.?}, TlsDatabaseLookupFlags 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{.?}, TlsDatabaseLookupFlags flags{.}), 
"lookup_certificate_issuer_async", slot_name slot, slot_callback SignalProxy_async_callback)
+  _WRAP_VFUNC(Glib::RefPtr<TlsCertificate> lookup_certificate_issuer(const Glib::RefPtr<TlsCertificate>& 
certificate, const Glib::RefPtr<TlsInteraction>& interaction, const Glib::RefPtr<Cancellable>& 
cancellable{.}, TlsDatabaseLookupFlags 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{.}, TlsDatabaseLookupFlags 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())')
+#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{.?}, TlsDatabaseLookupFlags 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{.?}, TlsDatabaseLookupFlags 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(const 
Glib::RefPtr<Glib::ByteArray>& issuer_raw_dn, const Glib::RefPtr<TlsInteraction>& interaction, const 
Glib::RefPtr<Cancellable>& cancellable{.}, TlsDatabaseLookupFlags 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{.}, TlsDatabaseLookupFlags 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)
 };
 
diff --git a/gio/src/volumemonitor.hg b/gio/src/volumemonitor.hg
index 24c62fb4..f51ac1c1 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*',`Glib::ListHandle< Glib::RefPtr<Drive> >',`$2($3, Glib::OWNERSHIP_SHALLOW)')
+#m4 _CONVERSION(`GList*',`Glib::ListHandle< Glib::RefPtr<Drive> >',`$2($3, Glib::OWNERSHIP_DEEP)')
   _WRAP_METHOD(Glib::ListHandle< Glib::RefPtr<Drive> > get_connected_drives(), 
g_volume_monitor_get_connected_drives)
 
-#m4 _CONVERSION(`GList*',`Glib::ListHandle< Glib::RefPtr<Volume> >',`$2($3, Glib::OWNERSHIP_SHALLOW)')
+#m4 _CONVERSION(`GList*',`Glib::ListHandle< Glib::RefPtr<Volume> >',`$2($3, Glib::OWNERSHIP_DEEP)')
   _WRAP_METHOD(Glib::ListHandle< Glib::RefPtr<Volume> > get_volumes(), g_volume_monitor_get_volumes)
 
-#m4 _CONVERSION(`GList*',`Glib::ListHandle< Glib::RefPtr<Mount> >',`$2($3, Glib::OWNERSHIP_SHALLOW)')
+#m4 _CONVERSION(`GList*',`Glib::ListHandle< Glib::RefPtr<Mount> >',`$2($3, Glib::OWNERSHIP_DEEP)')
   _WRAP_METHOD(Glib::ListHandle< 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]