From: wwp Date: Mon, 28 May 2018 15:17:05 +0000 (+0200) Subject: Dynamically allocate interface_vtable. X-Git-Tag: 3.17.0~82 X-Git-Url: http://git.claws-mail.org/?p=claws.git;a=commitdiff_plain;h=5a6f38fbc4c27229cc2fe8d7d6d878d7354e8d1b Dynamically allocate interface_vtable. --- diff --git a/src/plugins/vcalendar/vcal_dbus.c b/src/plugins/vcalendar/vcal_dbus.c index 05add6d44..c7160315a 100644 --- a/src/plugins/vcalendar/vcal_dbus.c +++ b/src/plugins/vcalendar/vcal_dbus.c @@ -125,13 +125,7 @@ static void handle_method_call (GDBusConnection *connection, } -static const GDBusInterfaceVTable interface_vtable = -{ - handle_method_call, - NULL, - NULL, - {0,0,0,0,0,0,0,0} -}; +static GDBusInterfaceVTable* interface_vtable = NULL; static GDBusNodeInfo *introspection_data = NULL; static GDBusInterfaceInfo *interface_info = NULL; @@ -167,10 +161,13 @@ static void bus_acquired(GDBusConnection *connection, gpointer user_data) { GError *err = NULL; + + cm_return_if_fail(interface_vtable); + g_dbus_connection_register_object(connection, "/org/gnome/Shell/CalendarServer", introspection_data->interfaces[0], - &interface_vtable, NULL, NULL, &err); + (const GDBusInterfaceVTable *)interface_vtable, NULL, NULL, &err); if (err != NULL) debug_print("Error: %s\n", err->message); } @@ -178,13 +175,18 @@ static void bus_acquired(GDBusConnection *connection, void connect_dbus(void) { debug_print("connect_dbus() invoked\n"); + + interface_vtable = g_malloc0(sizeof(GDBusInterfaceVTable)); + cm_return_if_fail(interface_vtable); + interface_vtable->method_call = (GDBusInterfaceMethodCallFunc)handle_method_call; + introspection_data = g_dbus_node_info_new_for_xml( introspection_xml, NULL); if (introspection_data == NULL) { debug_print("Couldn't figure out XML.\n"); return; } - + interface_info = g_dbus_node_info_lookup_interface( introspection_data, "org.gnome.Shell.CalendarServer"); @@ -202,6 +204,9 @@ void disconnect_dbus(void) { debug_print("disconnect_dbus() invoked\n"); g_bus_unown_name(dbus_own_id); + + g_free(interface_vtable); + interface_vtable = NULL; } #else