- GNativeVolumeMonitorClass *klass, *native_class, **native_class_out;
- const char *use_this;
- GIOExtensionPoint *ep;
- GIOExtension *extension;
- GList *l;
-
- native_class_out = data;
-
- use_this = g_getenv ("GIO_USE_VOLUME_MONITOR");
-
- /* Ensure vfs in modules loaded */
- _g_io_modules_ensure_loaded ();
-
- ep = g_io_extension_point_lookup (G_NATIVE_VOLUME_MONITOR_EXTENSION_POINT_NAME);
-
- native_class = NULL;
- if (use_this)
- {
- extension = g_io_extension_point_get_extension_by_name (ep, use_this);
- if (extension)
- {
- klass = G_NATIVE_VOLUME_MONITOR_CLASS (g_io_extension_ref_class (extension));
- if (G_VOLUME_MONITOR_CLASS (klass)->is_supported())
- native_class = klass;
- else
- g_type_class_unref (klass);
- }
- }
-
- if (native_class == NULL)
- {
- for (l = g_io_extension_point_get_extensions (ep); l != NULL; l = l->next)
- {
- extension = l->data;
- klass = G_NATIVE_VOLUME_MONITOR_CLASS (g_io_extension_ref_class (extension));
- if (G_VOLUME_MONITOR_CLASS (klass)->is_supported())
- {
- native_class = klass;
- break;
- }
- else
- g_type_class_unref (klass);
- }
- }
-
- if (native_class)
- {
- *native_class_out = native_class;
- return G_TYPE_FROM_CLASS (native_class);
- }
- else
- return G_TYPE_INVALID;
+ return _g_io_module_get_default_type (G_NATIVE_VOLUME_MONITOR_EXTENSION_POINT_NAME,
+ "GIO_USE_VOLUME_MONITOR",
+ G_STRUCT_OFFSET (GVolumeMonitorClass, is_supported));