[Frugalware-darcs] pacman: pacman: libarchive integration - part 2
Christian Hamar alias krix
krics at linuxforum.hu
Mon Dec 26 10:58:35 CET 2005
[pacman: libarchive integration - part 2
Christian Hamar alias krix <krics at linuxforum.hu>**20051209235243
* Modified all needed source files (i hope :P )
] {
hunk ./lib/libalpm/add.c 31
-#include <zlib.h>
-#include <libtar.h>
hunk ./lib/libalpm/add.c 306
- TAR *tar = NULL;
+ register struct archive *archive;
+ struct archive_entry *entry;
hunk ./lib/libalpm/add.c 320
- tartype_t gztype = {
- (openfunc_t)_alpm_gzopen_frontend,
- (closefunc_t)gzclose,
- (readfunc_t)gzread,
- (writefunc_t)gzwrite
- };
hunk ./lib/libalpm/add.c 400
- /* Extract the .tar.gz package */
- if(tar_open(&tar, info->data, &gztype, O_RDONLY, 0, TAR_GNU) == -1) {
+ /* Extract the package */
+ if ((archive = archive_read_new ()) == NULL)
+ RET_ERR(PM_ERR_LIBARCHIVE_ERROR, -1);
+
+ archive_read_support_compression_all (archive);
+ archive_read_support_format_all (archive);
+
+ if (archive_read_open_file (archive, info->data, 10240) != ARCHIVE_OK) {
hunk ./lib/libalpm/add.c 411
- for(i = 0; !th_read(tar); i++) {
+ chdir(handle->root);
+
+ for(i = 0; archive_read_next_header (archive, &entry) == ARCHIVE_OK; i++) {
hunk ./lib/libalpm/add.c 420
- STRNCPY(pathname, th_get_pathname(tar), PATH_MAX);
+ STRNCPY(pathname, archive_entry_pathname (entry), PATH_MAX);
hunk ./lib/libalpm/add.c 423
- tar_skip_regfile(tar);
+ archive_read_data_skip (archive);
hunk ./lib/libalpm/add.c 442
- tar_skip_regfile(tar);
+ archive_read_data_skip (archive);
hunk ./lib/libalpm/add.c 471
- if(tar_extract_file(tar, temp)) {
+
+ archive_entry_set_pathname (entry, temp);
+
+ if(archive_read_extract (archive, entry, ARCHIVE_EXTRACT_FLAGS) != ARCHIVE_OK) {
hunk ./lib/libalpm/add.c 517
+ archive_entry_set_pathname (entry, expath);
hunk ./lib/libalpm/add.c 522
+ archive_entry_set_pathname (entry, expath);
hunk ./lib/libalpm/add.c 527
+ archive_entry_set_pathname (entry, expath);
hunk ./lib/libalpm/add.c 570
+ archive_entry_set_pathname (entry, expath);
hunk ./lib/libalpm/add.c 598
- if(tar_extract_file(tar, expath)) {
- _alpm_log(PM_LOG_ERROR, "could not extract %s (%s)", pathname, strerror(errno));
- alpm_logaction("could not extract %s (%s)", pathname, strerror(errno));
+ archive_entry_set_pathname (entry, expath);
+ if(archive_read_extract (archive, entry, ARCHIVE_EXTRACT_FLAGS) != ARCHIVE_OK) {
+ _alpm_log(PM_LOG_ERROR, "could not extract %s (%s)", expath, strerror(errno));
+ alpm_logaction("could not extract %s (%s)", expath, strerror(errno));
hunk ./lib/libalpm/add.c 624
- tar_close(tar);
+ archive_read_finish (archive);
hunk ./lib/libalpm/alpm.h 364
+ PM_ERR_LIBARCHIVE_ERROR,
hunk ./lib/libalpm/error.c 115
+ case PM_ERR_LIBARCHIVE_ERROR:
+ return "libarchive error";
hunk ./lib/libalpm/package.c 28
-#include <libtar.h>
-#include <zlib.h>
hunk ./lib/libalpm/package.c 249
- TAR *tar;
+ register struct archive *archive;
+ struct archive_entry *entry;
hunk ./lib/libalpm/package.c 252
- tartype_t gztype = {
- (openfunc_t)_alpm_gzopen_frontend,
- (closefunc_t)gzclose,
- (readfunc_t)gzread,
- (writefunc_t)gzwrite
- };
hunk ./lib/libalpm/package.c 257
- if(tar_open(&tar, pkgfile, &gztype, O_RDONLY, 0, TAR_GNU) == -1) {
- RET_ERR(PM_ERR_NOT_A_FILE, NULL);
- }
+ if ((archive = archive_read_new ()) == NULL)
+ RET_ERR(PM_ERR_LIBARCHIVE_ERROR, NULL);
+
+ archive_read_support_compression_all (archive);
+ archive_read_support_format_all (archive);
+
+ if (archive_read_open_file (archive, pkgfile, 10240) != ARCHIVE_OK)
+ RET_ERR(PM_ERR_PKG_OPEN, -1);
hunk ./lib/libalpm/package.c 268
- tar_close(tar);
+ archive_read_finish (archive);
hunk ./lib/libalpm/package.c 277
- for(i = 0; !th_read(tar); i++) {
+ for(i = 0; archive_read_next_header (archive, &entry) == ARCHIVE_OK; i++) {
hunk ./lib/libalpm/package.c 289
- tar_extract_file(tar, descfile);
+ _alpm_archive_read_entry_data_into_fd (archive, file);
hunk ./lib/libalpm/package.c 320
- } else if(!strcmp(th_get_pathname(tar), "._install") || !strcmp(th_get_pathname(tar), ".INSTALL")) {
+ } else if(!strcmp(archive_entry_pathname (entry), "._install") || !strcmp(archive_entry_pathname (entry), ".INSTALL")) {
hunk ./lib/libalpm/package.c 323
- } else if(!strcmp(th_get_pathname(tar), ".FILELIST")) {
+ } else if(!strcmp(archive_entry_pathname (entry), ".FILELIST")) {
hunk ./lib/libalpm/package.c 333
- tar_extract_file(tar, fn);
+ _alpm_archive_read_entry_data_into_fd (archive, fd);
hunk ./lib/libalpm/package.c 356
- expath = strdup(th_get_pathname(tar));
+ expath = strdup(archive_entry_pathname (entry));
hunk ./lib/libalpm/package.c 361
- if(TH_ISREG(tar) && tar_skip_regfile(tar)) {
+ if(archive_read_data_skip (archive)) {
hunk ./lib/libalpm/package.c 367
- tar_close(tar);
+ archive_read_finish (archive);
hunk ./lib/libalpm/package.c 383
- tar_close(tar);
+ archive_read_finish (archive);
hunk ./lib/libalpm/sync.c 30
-#include <libtar.h>
-#include <zlib.h>
hunk ./lib/libalpm/sync.c 104
- TAR *tar = NULL;
- tartype_t gztype = {
- (openfunc_t)_alpm_gzopen_frontend,
- (closefunc_t)gzclose,
- (readfunc_t)gzread,
- (writefunc_t)gzwrite
- };
+ register struct archive *_archive;
+ struct archive_entry *entry;
+
+ if ((_archive = archive_read_new ()) == NULL) {
+ pm_errno = PM_ERR_LIBARCHIVE_ERROR;
+ goto error;
+ }
+
+ archive_read_support_compression_all(_archive);
+ archive_read_support_format_all (_archive);
hunk ./lib/libalpm/sync.c 115
- if(tar_open(&tar, archive, &gztype, O_RDONLY, 0, TAR_GNU) == -1) {
+ if (archive_read_open_file (_archive, archive, 10240) != ARCHIVE_OK) {
hunk ./lib/libalpm/sync.c 118
- }
+ }
hunk ./lib/libalpm/sync.c 123
- tar_close(tar);
+ archive_read_finish(_archive);
hunk ./lib/libalpm/sync.c 128
- if(tar) {
- tar_close(tar);
+ if(_archive) {
+ archive_read_finish(_archive);
hunk ./lib/libalpm/util.c 38
-#include <zlib.h>
-#include <libtar.h>
hunk ./lib/libalpm/util.c 41
+#include "error.h"
hunk ./lib/libalpm/util.c 44
-/* borrowed and modified from Per Liden's pkgutils (http://crux.nu) */
-long _alpm_gzopen_frontend(char *pathname, int oflags, int mode)
-{
- char* gzoflags;
- int fd;
- gzFile gzf;
-
- switch (oflags & O_ACCMODE) {
- case O_WRONLY:
- gzoflags = "w";
- break;
- case O_RDONLY:
- gzoflags = "r";
- break;
- case O_RDWR:
- default:
- errno = EINVAL;
- return -1;
- }
-
- if((fd = open(pathname, oflags, mode)) == -1) {
- return -1;
- }
- if((oflags & O_CREAT) && fchmod(fd, mode)) {
- close(fd);
- return -1;
- }
- if(!(gzf = gzdopen(fd, gzoflags))) {
- close(fd);
- errno = ENOMEM;
- return -1;
- }
-
- return (long)gzf;
-}
-
hunk ./lib/libalpm/util.c 194
+/* Compression functions
+ */
+
hunk ./lib/libalpm/util.c 199
- TAR *tar = NULL;
+ register struct archive *_archive;
+ struct archive_entry *entry;
hunk ./lib/libalpm/util.c 202
- tartype_t gztype = {
- (openfunc_t) _alpm_gzopen_frontend,
- (closefunc_t)gzclose,
- (readfunc_t) gzread,
- (writefunc_t)gzwrite
- };
hunk ./lib/libalpm/util.c 203
- /* open the .tar.gz package */
- if(tar_open(&tar, archive, &gztype, O_RDONLY, 0, TAR_GNU) == -1) {
- perror(archive);
- return(1);
- }
- while(!th_read(tar)) {
- if(fn && strcmp(fn, th_get_pathname(tar))) {
- if(TH_ISREG(tar) && tar_skip_regfile(tar)) {
- _alpm_log(PM_LOG_ERROR, "bad tar archive: %s", archive);
- tar_close(tar);
+ if ((_archive = archive_read_new ()) == NULL)
+ RET_ERR(PM_ERR_LIBARCHIVE_ERROR, -1);
+
+ archive_read_support_compression_all(_archive);
+ archive_read_support_format_all (_archive);
+
+ if (archive_read_open_file (_archive, archive, 10240) != ARCHIVE_OK)
+ RET_ERR(PM_ERR_PKG_OPEN, -1);
+
+ while (archive_read_next_header (_archive, &entry) == ARCHIVE_OK) {
+ if (fn && strcmp (fn, archive_entry_pathname (entry))) {
+ if (archive_read_data_skip (_archive) != ARCHIVE_OK)
hunk ./lib/libalpm/util.c 216
- }
hunk ./lib/libalpm/util.c 218
- snprintf(expath, PATH_MAX, "%s/%s", prefix, th_get_pathname(tar));
- if(tar_extract_file(tar, expath)) {
- _alpm_log(PM_LOG_ERROR, "could not extract %s (%s)", th_get_pathname(tar), strerror(errno));
+ snprintf(expath, PATH_MAX, "%s/%s", prefix, archive_entry_pathname (entry));
+ archive_entry_set_pathname (entry, expath);
+ if (archive_read_extract (_archive, entry, ARCHIVE_EXTRACT_FLAGS) != ARCHIVE_OK) {
+ fprintf(stderr, "could not extract %s: %s\n", archive_entry_pathname (entry), archive_error_string (_archive));
+ return(1);
hunk ./lib/libalpm/util.c 224
- if(fn) break;
- }
- tar_close(tar);
hunk ./lib/libalpm/util.c 225
+ if (fn)
+ break;
+ }
+
+ archive_read_finish (_archive);
hunk ./lib/libalpm/util.c 414
+
+int _alpm_archive_read_entry_data_into_fd (struct archive *archive, int file) {
+ register size_t length;
+ char cache [10240];
+
+ if (file == -1)
+ return ARCHIVE_RETRY;
+
+ while ((length = archive_read_data (archive, &cache, sizeof (cache))) > 0)
+ write (file, cache, length);
+
+ return ARCHIVE_OK;
+}
hunk ./lib/libalpm/util.h 25
+#include <archive.h>
+#include <archive_entry.h>
hunk ./lib/libalpm/util.h 48
-long _alpm_gzopen_frontend(char *pathname, int oflags, int mode);
+#define ARCHIVE_EXTRACT_FLAGS ARCHIVE_EXTRACT_OWNER | ARCHIVE_EXTRACT_PERM | ARCHIVE_EXTRACT_TIME
+
+int _alpm_archive_read_entry_data_into_fd (struct archive *archive, int file);
}
More information about the Frugalware-darcs
mailing list