static void populate_union_monitor (GUnionVolumeMonitor *union_monitor) { GVolumeMonitor *monitor; GNativeVolumeMonitorClass *native_class; GVolumeMonitorClass *klass; GIOExtensionPoint *ep; GIOExtension *extension; GList *l; native_class = get_native_class (); if (native_class != NULL) { monitor = g_object_new (G_TYPE_FROM_CLASS (native_class), NULL); g_union_volume_monitor_add_monitor (union_monitor, monitor); g_object_unref (monitor); g_type_class_unref (native_class); } ep = g_io_extension_point_lookup (G_VOLUME_MONITOR_EXTENSION_POINT_NAME); for (l = g_io_extension_point_get_extensions (ep); l != NULL; l = l->next) { extension = l->data; klass = G_VOLUME_MONITOR_CLASS (g_io_extension_ref_class (extension)); if (klass->is_supported == NULL || klass->is_supported()) { monitor = g_object_new (g_io_extension_get_type (extension), NULL); g_union_volume_monitor_add_monitor (union_monitor, monitor); g_object_unref (monitor); } g_type_class_unref (klass); } }
GMount * _g_mount_get_for_mount_path (const gchar *mount_path, GCancellable *cancellable) { GNativeVolumeMonitorClass *klass; GMount *mount; klass = get_native_class (); if (klass == NULL) return NULL; mount = NULL; if (klass->get_mount_for_mount_path) { g_rec_mutex_lock (&the_volume_monitor_mutex); mount = klass->get_mount_for_mount_path (mount_path, cancellable); g_rec_mutex_unlock (&the_volume_monitor_mutex); } /* TODO: How do we know this succeeded? Keep in mind that the native * volume monitor may fail (e.g. not being able to connect to * hald). Is the get_mount_for_mount_path() method allowed to * return NULL? Seems like it is ... probably the method needs * to take a boolean and write if it succeeds or not.. Messy. * Very messy. */ g_type_class_unref (klass); return mount; }
Value Context::make_native(FnPtr fn) { Value nat = static_cast<Class*>(get_native_class().obj)->make_instance(); static_cast<Native*>(nat.obj)->fn = fn; return nat; }