13781343738de4abddf56982325a77bd70a98cd26Alexander Larsson/* GIO - GLib Input, Output and Streaming Library
23781343738de4abddf56982325a77bd70a98cd26Alexander Larsson *
33781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * Copyright (C) 2006-2007 Red Hat, Inc.
43781343738de4abddf56982325a77bd70a98cd26Alexander Larsson *
53781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * This library is free software; you can redistribute it and/or
63781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * modify it under the terms of the GNU Lesser General Public
73781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * License as published by the Free Software Foundation; either
83781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * version 2 of the License, or (at your option) any later version.
93781343738de4abddf56982325a77bd70a98cd26Alexander Larsson *
103781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * This library is distributed in the hope that it will be useful,
113781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * but WITHOUT ANY WARRANTY; without even the implied warranty of
123781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
133781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * Lesser General Public License for more details.
143781343738de4abddf56982325a77bd70a98cd26Alexander Larsson *
153781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * You should have received a copy of the GNU Lesser General
163781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * Public License along with this library; if not, write to the
173781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
183781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * Boston, MA 02111-1307, USA.
193781343738de4abddf56982325a77bd70a98cd26Alexander Larsson *
203781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * Author: Alexander Larsson <alexl@redhat.com>
213781343738de4abddf56982325a77bd70a98cd26Alexander Larsson */
223781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
23761424465aaad736916b029383483b6ac419d831Johan Dahlin#include "config.h"
243781343738de4abddf56982325a77bd70a98cd26Alexander Larsson#include <string.h>
253781343738de4abddf56982325a77bd70a98cd26Alexander Larsson#include "gvfs.h"
263781343738de4abddf56982325a77bd70a98cd26Alexander Larsson#include "glocalvfs.h"
273869c33a73c89e1f2f916f6bd6dd85a06b34a08dAlexander Larsson#include "giomodule-priv.h"
283781343738de4abddf56982325a77bd70a98cd26Alexander Larsson#include "glibintl.h"
293781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
307f3280230bc9448a5750fc17a6eabef691ba25f4Alexander Larsson#include "gioalias.h"
317f3280230bc9448a5750fc17a6eabef691ba25f4Alexander Larsson
325247f12f3649726471080440de0d37b78c1cec33Andrew Walton/**
335247f12f3649726471080440de0d37b78c1cec33Andrew Walton * SECTION:gvfs
345247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @short_description: Virtual File System
35f3144c7efe8c84f7a00bff9b796d5e73efc151cfMatthias Clasen * @include: gio/gio.h
365247f12f3649726471080440de0d37b78c1cec33Andrew Walton *
375247f12f3649726471080440de0d37b78c1cec33Andrew Walton * Entry point for using GIO functionality.
385247f12f3649726471080440de0d37b78c1cec33Andrew Walton *
395247f12f3649726471080440de0d37b78c1cec33Andrew Walton **/
405247f12f3649726471080440de0d37b78c1cec33Andrew Walton
413781343738de4abddf56982325a77bd70a98cd26Alexander LarssonG_DEFINE_TYPE (GVfs, g_vfs, G_TYPE_OBJECT);
423781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
433781343738de4abddf56982325a77bd70a98cd26Alexander Larssonstatic void
443781343738de4abddf56982325a77bd70a98cd26Alexander Larssong_vfs_class_init (GVfsClass *klass)
453781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{
463781343738de4abddf56982325a77bd70a98cd26Alexander Larsson}
473781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
483781343738de4abddf56982325a77bd70a98cd26Alexander Larssonstatic void
493781343738de4abddf56982325a77bd70a98cd26Alexander Larssong_vfs_init (GVfs *vfs)
503781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{
513781343738de4abddf56982325a77bd70a98cd26Alexander Larsson}
523781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
533781343738de4abddf56982325a77bd70a98cd26Alexander Larsson/**
543781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * g_vfs_is_active:
555247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @vfs: a #GVfs.
565247f12f3649726471080440de0d37b78c1cec33Andrew Walton *
575247f12f3649726471080440de0d37b78c1cec33Andrew Walton * Checks if the VFS is active.
583781343738de4abddf56982325a77bd70a98cd26Alexander Larsson *
595247f12f3649726471080440de0d37b78c1cec33Andrew Walton * Returns: %TRUE if construction of the @vfs was successful and it is now active.
603781343738de4abddf56982325a77bd70a98cd26Alexander Larsson **/
613781343738de4abddf56982325a77bd70a98cd26Alexander Larssongboolean
623781343738de4abddf56982325a77bd70a98cd26Alexander Larssong_vfs_is_active (GVfs *vfs)
633781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{
643781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  GVfsClass *class;
653781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
663781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  g_return_val_if_fail (G_IS_VFS (vfs), FALSE);
673781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
683781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  class = G_VFS_GET_CLASS (vfs);
693781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
703781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  return (* class->is_active) (vfs);
713781343738de4abddf56982325a77bd70a98cd26Alexander Larsson}
723781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
733781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
743781343738de4abddf56982325a77bd70a98cd26Alexander Larsson/**
753781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * g_vfs_get_file_for_path:
765247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @vfs: a #GVfs.
773781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * @path: a string containing a VFS path.
783781343738de4abddf56982325a77bd70a98cd26Alexander Larsson *
795247f12f3649726471080440de0d37b78c1cec33Andrew Walton * Gets a #GFile for @path.
803781343738de4abddf56982325a77bd70a98cd26Alexander Larsson *
813bdbb2b329328eee3e0f3993612edb9a6f0fbfaaMatthias Clasen * Returns: a #GFile.
823bdbb2b329328eee3e0f3993612edb9a6f0fbfaaMatthias Clasen *     Free the returned object with g_object_unref().
833781343738de4abddf56982325a77bd70a98cd26Alexander Larsson **/
843781343738de4abddf56982325a77bd70a98cd26Alexander LarssonGFile *
85a2ca589703273fca80cb126430a8b058aba3eb52Matthias Claseng_vfs_get_file_for_path (GVfs       *vfs,
863781343738de4abddf56982325a77bd70a98cd26Alexander Larsson			 const char *path)
873781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{
883781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  GVfsClass *class;
893781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
903781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  g_return_val_if_fail (G_IS_VFS (vfs), NULL);
913781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  g_return_val_if_fail (path != NULL, NULL);
923781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
933781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  class = G_VFS_GET_CLASS (vfs);
943781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
953781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  return (* class->get_file_for_path) (vfs, path);
963781343738de4abddf56982325a77bd70a98cd26Alexander Larsson}
973781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
983781343738de4abddf56982325a77bd70a98cd26Alexander Larsson/**
993781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * g_vfs_get_file_for_uri:
1005247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @vfs: a#GVfs.
1013bdbb2b329328eee3e0f3993612edb9a6f0fbfaaMatthias Clasen * @uri: a string containing a URI
1025247f12f3649726471080440de0d37b78c1cec33Andrew Walton *
1035247f12f3649726471080440de0d37b78c1cec33Andrew Walton * Gets a #GFile for @uri.
1045247f12f3649726471080440de0d37b78c1cec33Andrew Walton *
1053781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * This operation never fails, but the returned object
1063bdbb2b329328eee3e0f3993612edb9a6f0fbfaaMatthias Clasen * might not support any I/O operation if the URI
1073bdbb2b329328eee3e0f3993612edb9a6f0fbfaaMatthias Clasen * is malformed or if the URI scheme is not supported.
1083781343738de4abddf56982325a77bd70a98cd26Alexander Larsson *
1095247f12f3649726471080440de0d37b78c1cec33Andrew Walton * Returns: a #GFile.
1103bdbb2b329328eee3e0f3993612edb9a6f0fbfaaMatthias Clasen *     Free the returned object with g_object_unref().
1113781343738de4abddf56982325a77bd70a98cd26Alexander Larsson **/
1123781343738de4abddf56982325a77bd70a98cd26Alexander LarssonGFile *
113a2ca589703273fca80cb126430a8b058aba3eb52Matthias Claseng_vfs_get_file_for_uri (GVfs       *vfs,
1143781343738de4abddf56982325a77bd70a98cd26Alexander Larsson			const char *uri)
1153781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{
1163781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  GVfsClass *class;
1173781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1183781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  g_return_val_if_fail (G_IS_VFS (vfs), NULL);
1193781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  g_return_val_if_fail (uri != NULL, NULL);
1203781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1213781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  class = G_VFS_GET_CLASS (vfs);
1223781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1233781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  return (* class->get_file_for_uri) (vfs, uri);
1243781343738de4abddf56982325a77bd70a98cd26Alexander Larsson}
1253781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1263781343738de4abddf56982325a77bd70a98cd26Alexander Larsson/**
1273781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * g_vfs_get_supported_uri_schemes:
1285247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @vfs: a #GVfs.
1293781343738de4abddf56982325a77bd70a98cd26Alexander Larsson *
130442e8df1b833e3311a214ae1bf02337b0c831544Matthias Clasen * Gets a list of URI schemes supported by @vfs.
1313781343738de4abddf56982325a77bd70a98cd26Alexander Larsson *
1323bdbb2b329328eee3e0f3993612edb9a6f0fbfaaMatthias Clasen * Returns: a %NULL-terminated array of strings.
1333bdbb2b329328eee3e0f3993612edb9a6f0fbfaaMatthias Clasen *     The returned array belongs to GIO and must
1343bdbb2b329328eee3e0f3993612edb9a6f0fbfaaMatthias Clasen *     not be freed or modified.
1353781343738de4abddf56982325a77bd70a98cd26Alexander Larsson **/
1363781343738de4abddf56982325a77bd70a98cd26Alexander Larssonconst gchar * const *
1373781343738de4abddf56982325a77bd70a98cd26Alexander Larssong_vfs_get_supported_uri_schemes (GVfs *vfs)
1383781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{
1393781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  GVfsClass *class;
1403781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1413781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  g_return_val_if_fail (G_IS_VFS (vfs), NULL);
1423781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1433781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  class = G_VFS_GET_CLASS (vfs);
1443781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1453781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  return (* class->get_supported_uri_schemes) (vfs);
1463781343738de4abddf56982325a77bd70a98cd26Alexander Larsson}
1473781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1483781343738de4abddf56982325a77bd70a98cd26Alexander Larsson/**
1493781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * g_vfs_parse_name:
1505247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @vfs: a #GVfs.
1513781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * @parse_name: a string to be parsed by the VFS module.
1523781343738de4abddf56982325a77bd70a98cd26Alexander Larsson *
1533781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * This operation never fails, but the returned object might
1543781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * not support any I/O operations if the @parse_name cannot
1553781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * be parsed by the #GVfs module.
1563781343738de4abddf56982325a77bd70a98cd26Alexander Larsson *
157442e8df1b833e3311a214ae1bf02337b0c831544Matthias Clasen * Returns: a #GFile for the given @parse_name.
1583bdbb2b329328eee3e0f3993612edb9a6f0fbfaaMatthias Clasen *     Free the returned object with g_object_unref().
1593781343738de4abddf56982325a77bd70a98cd26Alexander Larsson **/
1603781343738de4abddf56982325a77bd70a98cd26Alexander LarssonGFile *
161a2ca589703273fca80cb126430a8b058aba3eb52Matthias Claseng_vfs_parse_name (GVfs       *vfs,
1623781343738de4abddf56982325a77bd70a98cd26Alexander Larsson		  const char *parse_name)
1633781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{
1643781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  GVfsClass *class;
1653781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1663781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  g_return_val_if_fail (G_IS_VFS (vfs), NULL);
1673781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  g_return_val_if_fail (parse_name != NULL, NULL);
1683781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1693781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  class = G_VFS_GET_CLASS (vfs);
1703781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1713781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  return (* class->parse_name) (vfs, parse_name);
1723781343738de4abddf56982325a77bd70a98cd26Alexander Larsson}
1733781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1743781343738de4abddf56982325a77bd70a98cd26Alexander Larssonstatic gpointer
1753781343738de4abddf56982325a77bd70a98cd26Alexander Larssonget_default_vfs (gpointer arg)
1763781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{
1773781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  const char *use_this;
1783781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  GVfs *vfs;
179bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson  GList *l;
180bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson  GIOExtensionPoint *ep;
181bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson  GIOExtension *extension;
182bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson
1833781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1843781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  use_this = g_getenv ("GIO_USE_VFS");
1853781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1863781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  /* Ensure vfs in modules loaded */
1874f039bd490856afab9d0eff22fbaeeadaef651a2Alexander Larsson  _g_io_modules_ensure_loaded ();
1883781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
189bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson  ep = g_io_extension_point_lookup (G_VFS_EXTENSION_POINT_NAME);
1903781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
191bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson  if (use_this)
192bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson    {
193bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson      extension = g_io_extension_point_get_extension_by_name (ep, use_this);
194bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson      if (extension)
195bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson	{
196bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson	  vfs = g_object_new (g_io_extension_get_type (extension), NULL);
197bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson
198bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson	  if (g_vfs_is_active (vfs))
199bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson	    return vfs;
200bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson
201bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson	  g_object_unref (vfs);
202bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson	}
203bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson    }
204bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson
205bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson  for (l = g_io_extension_point_get_extensions (ep); l != NULL; l = l->next)
2063781343738de4abddf56982325a77bd70a98cd26Alexander Larsson    {
207bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson      extension = l->data;
208bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson
209bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson      vfs = g_object_new (g_io_extension_get_type (extension), NULL);
2103781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
2113781343738de4abddf56982325a77bd70a98cd26Alexander Larsson      if (g_vfs_is_active (vfs))
212bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson	return vfs;
2133781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
2143781343738de4abddf56982325a77bd70a98cd26Alexander Larsson      g_object_unref (vfs);
2153781343738de4abddf56982325a77bd70a98cd26Alexander Larsson    }
2163781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
2173781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
218bff9ecedbbea1a794827f569638365db40c442e6Alexander Larsson  return NULL;
2193781343738de4abddf56982325a77bd70a98cd26Alexander Larsson}
2203781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
2213781343738de4abddf56982325a77bd70a98cd26Alexander Larsson/**
2223781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * g_vfs_get_default:
2233781343738de4abddf56982325a77bd70a98cd26Alexander Larsson *
2245247f12f3649726471080440de0d37b78c1cec33Andrew Walton * Gets the default #GVfs for the system.
2255247f12f3649726471080440de0d37b78c1cec33Andrew Walton *
2265247f12f3649726471080440de0d37b78c1cec33Andrew Walton * Returns: a #GVfs.
2273781343738de4abddf56982325a77bd70a98cd26Alexander Larsson **/
2283781343738de4abddf56982325a77bd70a98cd26Alexander LarssonGVfs *
2293781343738de4abddf56982325a77bd70a98cd26Alexander Larssong_vfs_get_default (void)
2303781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{
2313781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  static GOnce once_init = G_ONCE_INIT;
2323781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
2333781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  return g_once (&once_init, get_default_vfs, NULL);
2343781343738de4abddf56982325a77bd70a98cd26Alexander Larsson}
2353781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
2363781343738de4abddf56982325a77bd70a98cd26Alexander Larsson/**
2373781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * g_vfs_get_local:
2383781343738de4abddf56982325a77bd70a98cd26Alexander Larsson *
2395247f12f3649726471080440de0d37b78c1cec33Andrew Walton * Gets the local #GVfs for the system.
2405247f12f3649726471080440de0d37b78c1cec33Andrew Walton *
2415247f12f3649726471080440de0d37b78c1cec33Andrew Walton * Returns: a #GVfs.
2423781343738de4abddf56982325a77bd70a98cd26Alexander Larsson **/
2433781343738de4abddf56982325a77bd70a98cd26Alexander LarssonGVfs *
2443781343738de4abddf56982325a77bd70a98cd26Alexander Larssong_vfs_get_local (void)
2453781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{
2463781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  static gsize vfs = 0;
2473781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
2483781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  if (g_once_init_enter (&vfs))
249d9594f5709313d6e7a8a4f3e5f3b23fc72017417Alexander Larsson    g_once_init_leave (&vfs, (gsize)_g_local_vfs_new ());
2503781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
2513781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  return G_VFS (vfs);
2523781343738de4abddf56982325a77bd70a98cd26Alexander Larsson}
2533781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
2547f3280230bc9448a5750fc17a6eabef691ba25f4Alexander Larsson#define __G_VFS_C__
2557f3280230bc9448a5750fc17a6eabef691ba25f4Alexander Larsson#include "gioaliasdef.c"
256