summaryrefslogtreecommitdiff
path: root/daemon
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2008-03-12 16:34:01 +0000
committerAlexander Larsson <alexl@src.gnome.org>2008-03-12 16:34:01 +0000
commitfd54a5bf754c1895a238a93be7bc4b03ac1de11c (patch)
tree116e4aca007065a257678242dd0226902b144a40 /daemon
parent24672e3dd455c3ad8c603fb935408add1578a8d1 (diff)
downloadgvfs-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.c44
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);