summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libarchive/libarchive.c62
1 files changed, 51 insertions, 11 deletions
diff --git a/libarchive/libarchive.c b/libarchive/libarchive.c
index cadd6a0..dffcaf8 100644
--- a/libarchive/libarchive.c
+++ b/libarchive/libarchive.c
@@ -1,6 +1,6 @@
/* libarchive plugin for Tux Commander
- * version 0.2.2, designed for libarchive v2.5.5 - v2.7.1 (recommended)
- * Copyright (C) 2008-2009 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ * version 0.2.3, designed for libarchive v2.5.5 - v2.8.0 (recommended)
+ * Copyright (C) 2008-2010 Tomas Bzatek <tbzatek@users.sourceforge.net>
* Check for updates on tuxcmd.sourceforge.net
*
* Uses libarchive library
@@ -42,7 +42,12 @@
#include <archive_entry.h>
#ifndef MODULE_SHARED
-# include <config.h>
+ #include <config.h>
+ #if ARCHIVE_VERSION_NUMBER >= 2008000
+ #define __LIBARCHIVE_BUILD
+ #include <archive_hash.h>
+ #undef __LIBARCHIVE_BUILD
+ #endif
#endif
#if ARCHIVE_VERSION_NUMBER >= 3000000
@@ -53,8 +58,8 @@
#endif
-#define MODULE_VERSION "0.2.2"
-#define MODULE_BUILD_DATE "2009-12-12"
+#define MODULE_VERSION "0.2.3"
+#define MODULE_BUILD_DATE "2010-02-05"
#define DEFAULT_BLOCK_SIZE 65536
@@ -161,7 +166,7 @@ VFSGetInfo()
module_info->Name = g_strdup ("libarchive plugin");
module_info->About = g_strdup_printf ("version %s, build date: %s\nusing %s%s\n",
MODULE_VERSION, MODULE_BUILD_DATE, ARCHIVE_LIBRARY_VERSION, shared_module);
- module_info->Copyright = g_strdup ("Plugin Copyright (C) 2008-2009 Tomáš Bžatek\nlibarchive sources Copyright (c) 2003-2007 Tim Kientzle");
+ module_info->Copyright = g_strdup ("Plugin Copyright (C) 2008-2010 Tomáš Bžatek\nlibarchive sources Copyright (c) 2003-2007 Tim Kientzle");
return module_info;
}
@@ -179,10 +184,13 @@ VFSGetArchiveExts ()
{
/* Make sure these end with a semicolon */
#define BASIC_FORMATS "tar;cpio;iso;a;shar;"
-#define BZIP_FORMATS "tar.bz2;tbz2;"
-#define ZLIB_FORMATS "tar.gz;tgz;tar.z;deb;"
-#define XZ_FORMATS "tar.lzma;tar.xz;"
-#define LZMA_FORMATS "tar.lzma;"
+#define BZIP_FORMATS "tar.bz2;tbz2;tbz;"
+#define ZLIB_FORMATS "tar.gz;tgz;tar.z;iso.z;cpio.gz;deb;"
+#define XZ_FORMATS "tar.lzma;tlz;tar.xz;txz;"
+#define LZMA_FORMATS "tar.lzma;tlz;"
+#define RPM_FORMATS "rpm;"
+#define UU_FORMATS "uu;"
+#define XAR_FORMATS "xar;"
char *formats;
@@ -207,7 +215,22 @@ char *formats;
#define FORMAT_LZMA
#endif
- formats = g_strdup (BASIC_FORMATS FORMAT_ZLIB FORMAT_BZLIB FORMAT_LZMA);
+ #if ARCHIVE_VERSION_NUMBER >= 2008000
+ #define FORMAT_RPM RPM_FORMATS
+ #define FORMAT_UU UU_FORMATS
+ #else
+ #define FORMAT_RPM
+ #define FORMAT_UU
+ #endif
+
+ #if (defined(HAVE_LIBXML_XMLREADER_H) || defined(HAVE_BSDXML_H) || defined(HAVE_EXPAT_H)) && \
+ defined(HAVE_ZLIB_H) && defined(ARCHIVE_HAS_MD5) && defined(ARCHIVE_HAS_SHA1)
+ #define FORMAT_XAR XAR_FORMATS
+ #else
+ #define FORMAT_XAR
+ #endif
+
+ formats = g_strdup (BASIC_FORMATS FORMAT_ZLIB FORMAT_BZLIB FORMAT_LZMA FORMAT_RPM FORMAT_UU FORMAT_XAR);
#else
struct archive *archive;
@@ -241,6 +264,23 @@ char *formats;
formats = s;
}
#endif
+#if ARCHIVE_VERSION_NUMBER >= 2008000
+ if (archive_read_support_compression_rpm (archive) == ARCHIVE_OK) {
+ s = g_strconcat (formats, RPM_FORMATS, NULL);
+ g_free (formats);
+ formats = s;
+ }
+ if (archive_read_support_compression_uu (archive) == ARCHIVE_OK) {
+ s = g_strconcat (formats, UU_FORMATS, NULL);
+ g_free (formats);
+ formats = s;
+ }
+ if (archive_read_support_format_xar (archive) == ARCHIVE_OK) {
+ s = g_strconcat (formats, XAR_FORMATS, NULL);
+ g_free (formats);
+ formats = s;
+ }
+#endif
archive_read_finish (archive);
#endif