// pkgutils
//
// Copyright (c) 2000-2005 Per Liden
+// Copyright (c) 2006-2007 by CRUX team (http://crux.nu)
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
#include <archive.h>
#include <archive_entry.h>
+#define INIT_ARCHIVE(ar) \
+ archive_read_support_compression_all((ar)); \
+ archive_read_support_format_all((ar))
+
using __gnu_cxx::stdio_filebuf;
pkgutil::pkgutil(const string& name)
result.second.version = version;
archive = archive_read_new();
- archive_read_support_compression_all(archive);
- archive_read_support_format_all(archive);
+ INIT_ARCHIVE(archive);
if (archive_read_open_filename(archive,
const_cast<char*>(filename.c_str()),
unsigned int i;
archive = archive_read_new();
- archive_read_support_compression_all(archive);
- archive_read_support_format_all(archive);
+ INIT_ARCHIVE(archive);
if (archive_read_open_filename(archive,
const_cast<char*>(filename.c_str()),
(real_filename.c_str()));
// Extract file
- unsigned int flags = ARCHIVE_EXTRACT_OWNER | ARCHIVE_EXTRACT_PERM | ARCHIVE_EXTRACT_UNLINK;
+ unsigned int flags = ARCHIVE_EXTRACT_OWNER | ARCHIVE_EXTRACT_PERM | ARCHIVE_EXTRACT_TIME | ARCHIVE_EXTRACT_UNLINK;
if (archive_read_extract(archive, entry, flags) != ARCHIVE_OK) {
// If a file fails to install we just print an error message and
//
// FIXME the code duplication here is butt ugly
archive = archive_read_new();
- archive_read_support_compression_all(archive);
- archive_read_support_format_all(archive);
+ INIT_ARCHIVE(archive);
if (archive_read_open_filename(archive,
const_cast<char*>(filename.c_str()),
// Too bad, there doesn't seem to be a way to reuse our archive
// instance
archive = archive_read_new();
- archive_read_support_compression_all(archive);
- archive_read_support_format_all(archive);
+ INIT_ARCHIVE(archive);
if (archive_read_open_filename(archive,
const_cast<char*>(filename.c_str()),