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