summaryrefslogtreecommitdiff
path: root/libarchive/libarchive.c
diff options
context:
space:
mode:
Diffstat (limited to 'libarchive/libarchive.c')
-rw-r--r--libarchive/libarchive.c60
1 files changed, 41 insertions, 19 deletions
diff --git a/libarchive/libarchive.c b/libarchive/libarchive.c
index eadda05..86823cb 100644
--- a/libarchive/libarchive.c
+++ b/libarchive/libarchive.c
@@ -1,5 +1,5 @@
/* libarchive plugin for Tux Commander
- * version 0.1.5, designed for libarchive 2.5.5
+ * version 0.1.6, designed for libarchive 2.7.1
* Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
* Check for updates on tuxcmd.sourceforge.net
*
@@ -45,10 +45,14 @@
#include <archive.h>
#include <archive_entry.h>
+#ifndef MODULE_SHARED
+# include <config.h>
+#endif
-#define VERSION "0.1.5"
-#define BUILD_DATE "2009-10-25"
+
+#define MODULE_VERSION "0.1.6"
+#define MODULE_BUILD_DATE "2009-11-15"
#define DEFAULT_BLOCK_SIZE 65536
@@ -138,10 +142,16 @@ struct TVFSInfo *
VFSGetInfo()
{
struct TVFSInfo *module_info = g_malloc0 (sizeof (struct TVFSInfo));
+#ifdef MODULE_SHARED
+ const char *shared_module = ", dynamically linked";
+#else
+ const char *shared_module = ", statically linked";
+#endif
module_info->ID = g_strdup ("libarchive_plugin");
module_info->Name = g_strdup ("libarchive plugin");
- module_info->About = g_strdup_printf ("version %s, build date: %s\nusing %s\n", VERSION, BUILD_DATE, ARCHIVE_LIBRARY_VERSION);
+ 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");
return module_info;
@@ -150,7 +160,33 @@ VFSGetInfo()
char *
VFSGetArchiveExts ()
{
- return g_strdup ("tar;tar.gz;tar.bz2;tgz;tbz2;cpio;iso;a;deb");
+#ifndef MODULE_SHARED
+ #ifdef HAVE_BZLIB_H
+ #define FORMAT_BZLIB "tar.bz2;tbz2;"
+ #else
+ #define FORMAT_BZLIB
+ #endif
+
+ #ifdef HAVE_ZLIB_H
+ #define FORMAT_ZLIB "tar.gz;tgz;deb;"
+ #else
+ #define FORMAT_ZLIB
+ #endif
+
+ #if HAVE_LZMA_H && HAVE_LIBLZMA
+ #define FORMAT_LZMA "tar.lzma;tar.xz;"
+ #elif HAVE_LZMADEC_H && HAVE_LIBLZMADEC
+ #define FORMAT_LZMA "tar.lzma;"
+ #else
+ #define FORMAT_LZMA
+ #endif
+
+ return g_strdup ("tar;cpio;iso;a;" FORMAT_ZLIB FORMAT_BZLIB FORMAT_LZMA);
+#else
+ /* Dynamic linking; we're unable to determine supported formats,
+ let's suppose distribution vendors always compile full set */
+ return g_strdup ("tar;tar.gz;tar.bz2;tgz;tbz2;cpio;iso;a;deb;tar.lzma;tar.xz");
+#endif
}
@@ -168,20 +204,6 @@ static TVFSResult libarchive_open(struct archive **a, const char *filename, size
archive_read_support_compression_all(*a);
archive_read_support_format_all(*a);
-/*
- archive_read_support_compression_bzip2(*a);
- archive_read_support_compression_gzip(*a);
- archive_read_support_compression_compress(*a);
- archive_read_support_compression_none(*a);
- archive_read_support_format_tar(*a);
- archive_read_support_format_cpio(*a);
- archive_read_support_format_ar(*a);
- archive_read_support_format_empty(*a);
- archive_read_support_format_gnutar(*a);
- archive_read_support_format_iso9660(*a);
- archive_read_support_format_cpio(*a);
-*/
-
r = archive_read_open_file(*a, filename, block_size);
if (r) {
fprintf(stderr, "(EE) libarchive_open: error occured when opening archive: %s\n", archive_error_string(*a));