diff options
author | Alexander Larsson <alexl@redhat.com> | 2008-03-12 16:34:01 +0000 |
---|---|---|
committer | Alexander Larsson <alexl@src.gnome.org> | 2008-03-12 16:34:01 +0000 |
commit | fd54a5bf754c1895a238a93be7bc4b03ac1de11c (patch) | |
tree | 116e4aca007065a257678242dd0226902b144a40 /daemon | |
parent | 24672e3dd455c3ad8c603fb935408add1578a8d1 (diff) | |
download | gvfs-fd54a5bf754c1895a238a93be7bc4b03ac1de11c.tar.gz |
Added archive backend from Benjamin Otte Requires libarchive
2008-03-12 Alexander Larsson <alexl@redhat.com>
* configure.ac:
* daemon/Makefile.am:
* daemon/gvfsbackendarchive.[ch]:
Added archive backend from Benjamin Otte
Requires libarchive
svn path=/trunk/; revision=1649
Diffstat (limited to 'daemon')
-rw-r--r-- | daemon/gvfsbackendarchive.c | 44 |
1 files changed, 31 insertions, 13 deletions
diff --git a/daemon/gvfsbackendarchive.c b/daemon/gvfsbackendarchive.c index f89928ee..e7e03c11 100644 --- a/daemon/gvfsbackendarchive.c +++ b/daemon/gvfsbackendarchive.c @@ -25,6 +25,7 @@ #include <config.h> #include <glib/gi18n.h> +#include <string.h> #include <archive.h> #include <archive_entry.h> @@ -472,14 +473,16 @@ do_mount (GVfsBackend *backend, gboolean is_automount) { GVfsBackendArchive *archive = G_VFS_BACKEND_ARCHIVE (backend); - const char *host; + const char *host, *file; GFileInfo *info; GIcon *icon; char *filename, *s; GError *error = NULL; host = g_mount_spec_get (mount_spec, "host"); - if (host == NULL) + file = g_mount_spec_get (mount_spec, "file"); + if (host == NULL && + file == NULL) { g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT, @@ -487,20 +490,25 @@ do_mount (GVfsBackend *backend, return; } - filename = g_uri_unescape_string (host, NULL); - if (filename == NULL) + if (host != NULL) { - g_vfs_job_failed (G_VFS_JOB (job), - G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT, - _("Invalid mount spec")); - return; + filename = g_uri_unescape_string (host, NULL); + if (filename == NULL) + { + g_vfs_job_failed (G_VFS_JOB (job), + G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT, + _("Invalid mount spec")); + return; + } + + archive->file = g_file_new_for_uri (filename); + g_free (filename); } - DEBUG ("Trying to mount %s\n", filename); - - archive->file = g_file_new_for_uri (filename); - g_free (filename); + else + archive->file = g_file_new_for_uri (file); + + DEBUG ("Trying to mount %s\n", g_file_get_uri (archive->file)); - /* FIXME: check if this file is an archive */ info = g_file_query_info (archive->file, "*", G_FILE_QUERY_INFO_NONE, @@ -514,6 +522,16 @@ do_mount (GVfsBackend *backend, return; } + if (g_file_info_get_file_type (info) != G_FILE_TYPE_REGULAR) + { + g_vfs_job_failed (G_VFS_JOB (job), + G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT, + _("Invalid mount spec")); + return; + } + + /* FIXME: check if this file is an archive */ + filename = g_file_get_uri (archive->file); DEBUG ("mounted %s\n", filename); s = g_uri_escape_string (filename, NULL, FALSE); |