diff options
author | Kjell Ahlstedt <kjellahlstedt@gmail.com> | 2023-03-27 15:20:04 +0200 |
---|---|---|
committer | Kjell Ahlstedt <kjellahlstedt@gmail.com> | 2023-03-27 15:20:04 +0200 |
commit | b7ad9b86d70003c065606c563578cc66dcd2ce0a (patch) | |
tree | 264e2c4723ba49647707a71b04c778f2e5b30124 /gio/src/asyncinitable.ccg | |
parent | d3874b1ec56d6db6b393e94daa1aded0f94d4b8b (diff) | |
download | glibmm-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.ccg | 29 |
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 { |