gvfs r1649 - in trunk: . daemon po



Author: alexl
Date: Wed Mar 12 16:34:01 2008
New Revision: 1649
URL: http://svn.gnome.org/viewvc/gvfs?rev=1649&view=rev

Log:
2008-03-12  Alexander Larsson  <alexl redhat com>

        * configure.ac:
        * daemon/Makefile.am:
        * daemon/gvfsbackendarchive.[ch]:
	Added archive backend from Benjamin Otte
	Requires libarchive



Modified:
   trunk/ChangeLog
   trunk/configure.ac
   trunk/daemon/gvfsbackendarchive.c
   trunk/po/ChangeLog
   trunk/po/POTFILES.in

Modified: trunk/configure.ac
==============================================================================
--- trunk/configure.ac	(original)
+++ trunk/configure.ac	Wed Mar 12 16:34:01 2008
@@ -401,7 +401,69 @@
 AM_CONDITIONAL(HAVE_SAMBA, test "$msg_samba" = "yes")
 AC_SUBST(SAMBA_CFLAGS)
 AC_SUBST(SAMBA_LIBS)
+
+dnl ==========================================================================
+
+dnl ****************************
+dnl *** Check for libarchive ***
+dnl ****************************
+
+AC_ARG_ENABLE(archive, [  --disable-archive       build without archive support])
+msg_archive="no"
+if test "x$enable_archive" != "xno"; then
+  AC_ARG_WITH(archive-includes, [  --with-archive-includes=PREFIX     Location of archive includes.],
+	      with_archive_includes="$withval", with_archive_includes="/usr/include")
+  have_archive_includes="no"
+  if test "x${with_archive_includes}" != "xno"; then
+	CPPFLAGS_save="$CPPFLAGS"
+
+	CPPFLAGS="$CPPFLAGS -I$with_archive_includes"
+	AC_CHECK_HEADER(archive.h, [ archive_includes="yes" ])
+	CPPFLAGS="$CPPFLAGS_save"
+	
+	if test "x{archive_includes}" != "xno" -a "x${archive_includes}" != "x"; then
+		have_archive_includes="yes"
+		if test "${with_archive_includes}" != "/usr/include" ; then
+			ARCHIVE_CFLAGS="-I$with_archive_includes"
+		else
+			ARCHIVE_CFLAGS=""
+		fi
+	else
+		ARCHIVE_CFLAGS=""
+	fi
+  fi
+  AC_ARG_WITH(archive-libs, [  --with-archive-libs=PREFIX     	Location of Archive libs.],
+	      with_archive_libs="$withval", with_archive_libs="/usr/lib")
+  if test "x${with_archive_libs}" != "xno" -a "x${have_archive_includes}" != "xno"; then
+	LDFLAGS_save="$LDFLAGS"
 	
+	LDFLAGS="$LDFLAGS -L$with_archive_libs"
+	AC_CHECK_LIB(archive, archive_read_open, archive_libs="yes", archive_libs="no")
+	LDFLAGS="$LDFLAGS_save"
+	if test "x${archive_libs}" != "xno"; then
+		AC_DEFINE(HAVE_ARCHIVE,, [Define to 1 if you have the libarchive library])
+		msg_archive="yes"
+                if test x$with_archive_libs != x/usr/lib; then
+                        ARCHIVE_LIBS="-L$with_archive_libs -larchive"
+                else
+                	ARCHIVE_LIBS="-larchive"
+                fi
+	else
+		AC_CHECK_LIB(archive, archive_read_open, archive_old_libs="yes", archive_old_libs="no")
+		if test "x${archive_old_libs}" != "xno"; then
+		   msg_archive="Too old, need at least archive 3.0.22"
+		fi
+		ARCHIVE_CFLAGS=""
+		ARCHIVE_LIBS=""
+	fi
+  fi
+  AC_MSG_CHECKING(for Archive 3.libraries)
+  AC_MSG_RESULT($msg_archive)
+fi
+AM_CONDITIONAL(HAVE_ARCHIVE, test "$msg_archive" = "yes")
+AC_SUBST(ARCHIVE_CFLAGS)
+AC_SUBST(ARCHIVE_LIBS)
+
 dnl ==========================================================================
 	
 dnl Globally define_GNU_SOURCE and therefore enable the GNU extensions
@@ -478,6 +540,7 @@
 	FUSE support:                 $msg_fuse
         CDDA support:                 $msg_cdda
         Gphoto2 support:              $msg_gphoto2
+	archive support:	      $msg_archive
         GConf support:                $msg_gconf
         DNS-SD support:               $msg_avahi
 	Use HAL for volume monitor:   $msg_hal (with fast init path: $have_hal_fast_init)

Modified: trunk/daemon/gvfsbackendarchive.c
==============================================================================
--- trunk/daemon/gvfsbackendarchive.c	(original)
+++ trunk/daemon/gvfsbackendarchive.c	Wed Mar 12 16:34:01 2008
@@ -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 @@
 	  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 @@
       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 @@
       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);

Modified: trunk/po/POTFILES.in
==============================================================================
--- trunk/po/POTFILES.in	(original)
+++ trunk/po/POTFILES.in	Wed Mar 12 16:34:01 2008
@@ -11,6 +11,7 @@
 common/gvfsdaemonprotocol.c
 daemon/daemon-main.c
 daemon/gvfsbackend.c
+daemon/gvfsbackendarchive.c
 daemon/gvfsbackendburn.c
 daemon/gvfsbackendcdda.c
 daemon/gvfsbackendcomputer.c



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]