summaryrefslogtreecommitdiff
path: root/gio/src/asyncinitable.ccg
diff options
context:
space:
mode:
authorKjell Ahlstedt <kjellahlstedt@gmail.com>2023-03-27 15:20:04 +0200
committerKjell Ahlstedt <kjellahlstedt@gmail.com>2023-03-27 15:20:04 +0200
commitb7ad9b86d70003c065606c563578cc66dcd2ce0a (patch)
tree264e2c4723ba49647707a71b04c778f2e5b30124 /gio/src/asyncinitable.ccg
parentd3874b1ec56d6db6b393e94daa1aded0f94d4b8b (diff)
downloadglibmm-b7ad9b86d70003c065606c563578cc66dcd2ce0a.tar.gz
Gio: Use callback functions with C linkage
* gio/giomm/socketsource.cc: Add extern "C". * gio/src/application.[ccg|hg]: Call Application_Class::open_callback() via a local function with C linkage. * gio/src/asyncinitable.[ccg|hg]: Call AsyncInitable_Class::init_async_vfunc_callback() and init_finish_vfunc_callback() via local functions with C linkage. * gio/src/dbusobjectmanagerclient.ccg: Use a local function with C linkage instead of Glib::destroy_notify_delete<SlotProxyType>. * gio/src/file.ccg: Add extern "C". * gio/src/liststore.ccg: Add a TODO comment. * gio/src/memoryinputstream.ccg: Add extern "C". * gio/src/settings.ccg: Add extern "C". * gio/src/socketcontrolmessage.[ccg|hg]: Call SocketControlMessage_Class::deserialize_async_vfunc_callback() via a local function with C linkage. Code that mixes up C linkage and C++ linkage has undefined behavior. Most compilers make no difference between C and C++ linkage, so it has not been an issue so far. Part of issue #1
Diffstat (limited to 'gio/src/asyncinitable.ccg')
-rw-r--r--gio/src/asyncinitable.ccg29
1 files changed, 29 insertions, 0 deletions
diff --git a/gio/src/asyncinitable.ccg b/gio/src/asyncinitable.ccg
index 314c5b3f..38b5dd1c 100644
--- a/gio/src/asyncinitable.ccg
+++ b/gio/src/asyncinitable.ccg
@@ -20,6 +20,35 @@
#include <giomm/cancellable.h>
#include <giomm/slot_async.h>
+namespace // anonymous
+{
+using AsyncInitable_init_async_vfunc_functype = void (*) (GAsyncInitable* self,
+ int io_priority, GCancellable* cancellable, GAsyncReadyCallback callback,
+ gpointer user_data);
+using AsyncInitable_init_finish_vfunc_functype = gboolean (*) (GAsyncInitable* self,
+ GAsyncResult* res, GError** error);
+
+AsyncInitable_init_async_vfunc_functype AsyncInitable_init_async_vfunc_funcptr;
+AsyncInitable_init_finish_vfunc_functype AsyncInitable_init_finish_vfunc_funcptr;
+
+extern "C"
+{
+static void
+AsyncInitable_init_async_vfunc_c_callback(GAsyncInitable* self, int io_priority,
+ GCancellable* cancellable, GAsyncReadyCallback callback, gpointer user_data)
+{
+ AsyncInitable_init_async_vfunc_funcptr(self, io_priority, cancellable, callback, user_data);
+}
+
+static gboolean
+AsyncInitable_init_finish_vfunc_c_callback(GAsyncInitable* self,
+ GAsyncResult* res, GError** error)
+{
+ return AsyncInitable_init_finish_vfunc_funcptr(self, res, error);
+}
+} // extern "C"
+} // anonymous namespace
+
namespace Gio
{