X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;ds=sidebyside;f=gio%2Fglocalvfs.c;h=b0bae9cf768c12715953b4a8698d04f88be7c782;hb=7fd6f07d498063470903a886b4805a13bd333908;hp=e4ec85ab4c34980feb511ffe65dbb10fba3b846e;hpb=43ae3892110d4d4a0c744a10cbcbdcc337efefc1;p=platform%2Fupstream%2Fglib.git diff --git a/gio/glocalvfs.c b/gio/glocalvfs.c index e4ec85a..b0bae9c 100644 --- a/gio/glocalvfs.c +++ b/gio/glocalvfs.c @@ -13,23 +13,24 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. + * Public License along with this library; if not, see . * * Author: Alexander Larsson */ -#include +#include "config.h" #include "glocalvfs.h" #include "glocalfile.h" +#include "giomodule.h" +#include "giomodule-priv.h" +#include "gvfs.h" #include #include -#ifdef HAVE_PWD_H +#ifdef G_OS_UNIX #include #endif +#include -#include "gioalias.h" struct _GLocalVfs { @@ -43,8 +44,12 @@ struct _GLocalVfsClass }; #define g_local_vfs_get_type _g_local_vfs_get_type -G_DEFINE_TYPE (GLocalVfs, g_local_vfs, G_TYPE_VFS) - +G_DEFINE_TYPE_WITH_CODE (GLocalVfs, g_local_vfs, G_TYPE_VFS, + _g_io_modules_ensure_extension_points_registered (); + g_io_extension_point_implement (G_VFS_EXTENSION_POINT_NAME, + g_define_type_id, + "local", + 0)) static void g_local_vfs_finalize (GObject *object) { @@ -83,9 +88,22 @@ g_local_vfs_get_file_for_uri (GVfs *vfs, { char *path; GFile *file; + char *stripped_uri, *hash; + + if (strchr (uri, '#') != NULL) + { + stripped_uri = g_strdup (uri); + hash = strchr (stripped_uri, '#'); + *hash = 0; + } + else + stripped_uri = (char *)uri; + + path = g_filename_from_uri (stripped_uri, NULL, NULL); - path = g_filename_from_uri (uri, NULL, NULL); - + if (stripped_uri != uri) + g_free (stripped_uri); + if (path != NULL) file = _g_local_file_new (path); else @@ -110,11 +128,9 @@ g_local_vfs_parse_name (GVfs *vfs, { GFile *file; char *filename; - char *user_name; char *user_prefix; const char *user_start, *user_end; char *rest; - struct passwd *passwd_file_entry; g_return_val_if_fail (G_IS_VFS (vfs), NULL); g_return_val_if_fail (parse_name != NULL, NULL); @@ -134,10 +150,13 @@ g_local_vfs_parse_name (GVfs *vfs, user_end = parse_name; if (user_end == user_start) - user_prefix = g_strdup (g_get_home_dir()); + user_prefix = g_strdup (g_get_home_dir ()); else { -#ifdef HAVE_PWD_H +#ifdef G_OS_UNIX + struct passwd *passwd_file_entry; + char *user_name; + user_name = g_strndup (user_start, user_end - user_start); passwd_file_entry = getpwnam (user_name); g_free (user_name); @@ -189,9 +208,6 @@ g_local_vfs_class_init (GLocalVfsClass *class) vfs_class = G_VFS_CLASS (class); - vfs_class->name = "local"; - vfs_class->priority = 0; - vfs_class->is_active = g_local_vfs_is_active; vfs_class->get_file_for_path = g_local_vfs_get_file_for_path; vfs_class->get_file_for_uri = g_local_vfs_get_file_for_uri;