You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
333 lines
9.3 KiB
333 lines
9.3 KiB
# --- SDE-COPYRIGHT-NOTE-BEGIN --- |
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch. |
|
# |
|
# Filename: package/.../mine/any-archiver.patch |
|
# Copyright (C) 2004 - 2006 The T2 SDE Project |
|
# |
|
# More information can be found in the files COPYING and README. |
|
# |
|
# This patch file is dual-licensed. It is available under the license the |
|
# patched project is licensed under, as long as it is an OpenSource license |
|
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms |
|
# of the GNU General Public License as published by the Free Software |
|
# Foundation; either version 2 of the License, or (at your option) any later |
|
# version. |
|
# --- SDE-COPYRIGHT-NOTE-END --- |
|
|
|
this fixes a few bugs like crashing on non-existing file and reading the |
|
package database before checking for the file. |
|
|
|
Implements using any compressed tar package as archiver and not use the |
|
bzip2 copy but the systen compressors. |
|
|
|
(This is just a quick gap filler until we get rid of the whole mine mess.) |
|
|
|
- Rene Rebe <rene@exactcode.de> |
|
|
|
Index: install.c |
|
=================================================================== |
|
--- ./install.c (revision 3) |
|
+++ ./install.c (revision 13) |
|
@@ -1,6 +1,7 @@ |
|
/* |
|
* GEM MINE - The ROCK Linux Package Manager |
|
* Copyright (C) 2002-2005 Clifford Wolf |
|
+ * Copyright (C) 2005-2006 René Rebe |
|
* |
|
* 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 |
|
@@ -29,7 +30,6 @@ |
|
#include <fnmatch.h> |
|
|
|
#include "cdb.h" |
|
-#include "bzlib.h" |
|
#include "libtar.h" |
|
|
|
#include "mine.h" |
|
@@ -60,70 +60,114 @@ |
|
int pos, len; |
|
int rc; |
|
|
|
- char *filename; |
|
+ char *filename = 0; |
|
+ char *decompressor = 0; |
|
char buffer[1024]; |
|
char buffer2[1024]; |
|
char buffer3[1024]; |
|
TAR *t = NULL; |
|
- BZFILE *b = NULL; |
|
|
|
- if ( ! mode_force ) |
|
- md5sum_initdb(root, mode_verbose); |
|
+ errno = 0; |
|
|
|
- if ( (gem_fd = open(package, O_RDONLY)) < 0 ) goto error_errno; |
|
- cdb_init(&c, gem_fd); |
|
+ decompressor = strstr (package, ".tar"); |
|
+ if (decompressor) { |
|
+ /* strip .tar. */ |
|
+ decompressor += 4; |
|
+ // fprintf (stderr, "Decomp: '%s'\n", decompressor); |
|
+ if (!*decompressor) |
|
+ decompressor = "cat"; |
|
+ else if (strcmp (decompressor, ".bz2") == 0) |
|
+ decompressor = "bzip2"; |
|
+ else if (strcmp (decompressor, ".gz") == 0) |
|
+ decompressor = "gzip"; |
|
+ else if (strcmp (decompressor, ".lzo") == 0) |
|
+ decompressor = "lzop"; |
|
+ else { |
|
+ fprintf (stderr, "Unknown decompressor '%s'.\n", |
|
+ decompressor); |
|
+ return 1; |
|
+ } |
|
+ } |
|
|
|
- rc = cdb_find(&c, "pkg_name", 8); |
|
- if ( rc <= 0 ) goto error; |
|
- pos = cdb_datapos(&c); len = cdb_datalen(&c); |
|
- pname = malloc(len+1); pname[len] = 0; |
|
- if (cdb_read(&c, pname, len, pos) == -1) goto error; |
|
- |
|
pipe(gem2bunzip); |
|
- pipe(bunzip2tar); |
|
|
|
- /* |
|
- * Extract tar.bz2 from GEM file |
|
- */ |
|
- if (!fork()) { |
|
- close(gem2bunzip[0]); |
|
- close(bunzip2tar[0]); |
|
- close(bunzip2tar[1]); |
|
+ if (!decompressor) { |
|
+ decompressor = "bzip2"; /* let the generic code decompress it */ |
|
|
|
- rc = cdb_find(&c, "pkg_tarbz2", 10); |
|
- if ( rc <= 0 ) exit(1); |
|
+ if ( (gem_fd = open(package, O_RDONLY)) < 0 ) goto error_errno; |
|
+ cdb_init(&c, gem_fd); |
|
|
|
- pos = cdb_datapos(&c); |
|
- len = cdb_datalen(&c); |
|
- if (len <= 0) exit(1); |
|
+ rc = cdb_find(&c, "pkg_name", 8); |
|
+ if ( rc <= 0 ) goto error; |
|
+ pos = cdb_datapos(&c); len = cdb_datalen(&c); |
|
+ pname = malloc(len+1); pname[len] = 0; |
|
+ if (cdb_read(&c, pname, len, pos) == -1) goto error; |
|
|
|
- while (len > 0) { |
|
- if ( cdb_read(&c, buffer, len>512 ? 512 : len, |
|
- pos) == -1 ) goto error; |
|
- write(gem2bunzip[1], buffer, len > 512 ? 512 : len); |
|
- pos += len > 512 ? 512 : len; |
|
- len -= 512; |
|
+ /* |
|
+ * Extract tar.bz2 from GEM file |
|
+ */ |
|
+ if (!fork()) { |
|
+ close(gem2bunzip[0]); |
|
+ |
|
+ rc = cdb_find(&c, "pkg_tarbz2", 10); |
|
+ if ( rc <= 0 ) exit(1); |
|
+ |
|
+ pos = cdb_datapos(&c); |
|
+ len = cdb_datalen(&c); |
|
+ if (len <= 0) exit(1); |
|
+ |
|
+ while (len > 0) { |
|
+ if ( cdb_read(&c, buffer, len>512 ? 512 : len, |
|
+ pos) == -1 ) goto error; |
|
+ write(gem2bunzip[1], buffer, len > 512 ? 512 : len); |
|
+ pos += len > 512 ? 512 : len; |
|
+ len -= 512; |
|
+ } |
|
+ |
|
+ cdb_free(&c); |
|
+ close(gem_fd); |
|
+ |
|
+ exit(0); |
|
} |
|
+ } |
|
+ else /* vanilla tar flavour */ |
|
+ { |
|
+ if (!fork()) { |
|
+ close(gem2bunzip[0]); |
|
|
|
- cdb_free(&c); |
|
- close(gem_fd); |
|
+ int fd = open (package, O_RDONLY); |
|
+ if (fd < 0) goto error_errno; |
|
+ int len; |
|
+ do { |
|
+ len = read(fd, buffer, sizeof(buffer)); |
|
+ if (len < 0) goto error; |
|
+ write(gem2bunzip[1], buffer, len); |
|
|
|
- exit(0); |
|
+ } while (len > 0); |
|
+ |
|
+ close(fd); |
|
+ exit(0); |
|
+ } |
|
} |
|
|
|
+ pipe(bunzip2tar); |
|
+ |
|
/* |
|
- * Bunzip tar.bz2 file |
|
+ * decompress |
|
*/ |
|
if (!fork()) { |
|
close(gem2bunzip[1]); |
|
close(bunzip2tar[0]); |
|
|
|
- b = BZ2_bzdopen(gem2bunzip[0], "r"); |
|
- while ( (rc=BZ2_bzread(b, buffer, 512)) > 0 ) |
|
- write(bunzip2tar[1], buffer, rc); |
|
- BZ2_bzclose(b); |
|
- |
|
- exit(0); |
|
+ dup2 (gem2bunzip[0], 0); |
|
+ dup2 (bunzip2tar[1], 1); |
|
+ close (gem2bunzip[0]); |
|
+ close (bunzip2tar[1]); |
|
+ if (strcmp (decompressor, "cat") == 0) |
|
+ execlp (decompressor, decompressor, NULL); |
|
+ else |
|
+ execlp (decompressor, decompressor, "-d", "-c", NULL); |
|
+ goto error_errno; |
|
} |
|
|
|
/* |
|
@@ -133,6 +177,9 @@ |
|
close(gem2bunzip[1]); |
|
close(bunzip2tar[1]); |
|
|
|
+ if ( ! mode_force ) |
|
+ md5sum_initdb(root, mode_verbose); |
|
+ |
|
if (tar_fdopen(&t, bunzip2tar[0], "pipe", NULL, |
|
O_RDONLY, 0, 0) == -1) goto error_errno; |
|
if ( mode_test && mode_verbose ) printf("-- %s --\n", pname); |
|
@@ -225,7 +272,9 @@ |
|
|
|
error_errno: |
|
fprintf(stderr, "While installing GEM file %s%s%s%s: %s\n", package, |
|
- filename?" (":"", filename?filename:"", filename?"(":"", |
|
+ filename ? " (" : "", |
|
+ filename ? filename : "", |
|
+ filename ? ")" : "", |
|
errno ? strerror(errno) : "Unknown error"); |
|
if ( t != NULL) tar_close(t); |
|
if ( gem_fd != -1 ) { cdb_free(&c); close(gem_fd); } |
|
Index: Makefile |
|
=================================================================== |
|
--- ./Makefile (revision 3) |
|
+++ ./Makefile (revision 13) |
|
@@ -6,12 +6,6 @@ |
|
CDB_OBJ = $(CDB_DIR)/cdb.a $(CDB_DIR)/alloc.a $(CDB_DIR)/buffer.a |
|
CDB_OBJ += $(CDB_DIR)/byte.a $(CDB_DIR)/unix.a |
|
|
|
-# LibBzip2 Sub-Package |
|
-# |
|
-BZIP2_VER = 1.0.2 |
|
-BZIP2_DIR = bzip2-$(BZIP2_VER) |
|
-BZIP2_OBJ = $(BZIP2_DIR)/libbz2.a |
|
- |
|
# LibTar Sub-Package |
|
# |
|
LIBTAR_VER = 1.2.11 |
|
@@ -43,11 +37,11 @@ |
|
|
|
# The usual list of build targets |
|
# |
|
-MINE_ALL_OBJS = $(MINE_OBJ) $(CDB_OBJ) $(BZIP2_OBJ) $(LIBTAR_OBJ) |
|
+MINE_ALL_OBJS = $(MINE_OBJ) $(CDB_OBJ) $(LIBTAR_OBJ) |
|
|
|
# Set and configure the c-compiler |
|
# |
|
-CFLAGS = -I$(CDB_DIR) -I$(BZIP2_DIR) -I$(LIBTAR_DIR)/lib -I. -Wall -Os |
|
+CFLAGS = -I$(CDB_DIR) -I/usr/include -I$(LIBTAR_DIR)/lib -I. -Wall -Os |
|
CFLAGS += -I$(LIBTAR_DIR)/listhash -DMINE_VERSION=\"$(MINE_VER)\" -ggdb |
|
CFLAGS += -DGEMCACHE=\"/var/cache/gem\" -DMINECURLOPT=\"/etc/mine.curlopt\" |
|
ifeq ($(USE_AVL), 1) |
|
@@ -86,7 +80,7 @@ |
|
$(CC) $(MINE_ALL_OBJS) -o mine |
|
|
|
mine.static: |
|
- $(CC) $(MINE_ALL_OBJS) -static -o mine.static |
|
+ $(CC) -static $(MINE_ALL_OBJS) $(MINE_ALL_LIBS) -o mine.static |
|
|
|
gasgui: $(GAS_OBJ) |
|
$(CC) $(GAS_OBJ) -ldialog -lcurses -lm -o gasgui |
|
@@ -100,22 +94,18 @@ |
|
endif |
|
[ -f $(sysprefix)/etc/rocket.conf ] || cp rocket.conf $(sysprefix)/etc/ |
|
|
|
-$(MINE_OBJ): $(CDB_OBJ) $(BZIP2_OBJ) $(LIBTAR_OBJ) |
|
+$(MINE_OBJ): $(CDB_OBJ) $(LIBTAR_OBJ) |
|
|
|
$(CDB_OBJ): |
|
$(BUILDCC) -o $(CDB_DIR)/auto-str $(CDB_DIR)/auto-str.c |
|
$(MAKE) 'AR=$(AR)' 'RANLIB=$(RANLIB)' -C $(CDB_DIR) |
|
|
|
-$(BZIP2_OBJ): |
|
- $(MAKE) -C $(BZIP2_DIR) libbz2.a |
|
- |
|
$(LIBTAR_OBJ): |
|
cd $(LIBTAR_DIR) && ./configure --without-zlib $(CONFOPT) |
|
$(MAKE) -C $(LIBTAR_DIR) |
|
|
|
patchfiles: |
|
sh xdiff.sh $(CDB_DIR)/ > $(CDB_DIR).patch |
|
-# sh xdiff.sh (BZIP2_DIR)/ > $(BZIP2_DIR).patch |
|
sh xdiff.sh $(LIBTAR_DIR)/ > $(LIBTAR_DIR).patch |
|
|
|
clean: |
|
@@ -124,7 +114,6 @@ |
|
grep -qx "$${x#$(CDB_DIR)/}" $(CDB_DIR)/FILES || rm -v $$x ; \ |
|
done |
|
@rm -vf *.o mine mine.static gasgui core |
|
- -@make -C $(BZIP2_DIR) distclean |
|
-@make -C $(LIBTAR_DIR) distclean |
|
echo "GEM MINE $(MINE_VER)" > VERSION |
|
|
|
--- ./readdb.c 2005-03-23 09:51:06.000000000 +0100 |
|
+++ ./readdb.c 2006-06-05 14:55:33.817538500 +0200 |
|
@@ -1,6 +1,7 @@ |
|
/* |
|
* GEM MINE - The ROCK Linux Package Manager |
|
* Copyright (C) 2002-2005 Clifford Wolf |
|
+ * Copyright (C) 2006 René Rebe |
|
* |
|
* 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 |
|
@@ -215,11 +216,12 @@ |
|
} |
|
if ( !dbf ) fclose(f); |
|
|
|
- snprintf(line, 1024, "%s/pkgs/%s-%s.gem", config, p->name, p->version); |
|
+ /* without extension, it is cut off above */ |
|
+ snprintf(line, 1024, "%s/pkgs/%s-%s", config, p->name, p->version); |
|
if ( memdb_get(&files_on_disks, line) ) { |
|
p->disk_number = atoi(memdb_search_result); |
|
} else { |
|
- snprintf(line, 1024, "%s/pkgs/%s.gem", config, p->name); |
|
+ snprintf(line, 1024, "%s/pkgs/%s", config, p->name); |
|
if ( memdb_get(&files_on_disks, line) ) |
|
p->disk_number = atoi(memdb_search_result); |
|
} |
|
@@ -420,7 +423,12 @@ |
|
snprintf(pkgdir, 200, "%s/pkgs/", config); |
|
|
|
while ( fgets(line, 160, f) != NULL ) { |
|
+ char* s; |
|
sscanf(line, "disk%s %s", disk, filename); |
|
+ /* cut the extension */ |
|
+ s = strstr (filename, ".tar."); |
|
+ if ( !s ) s = strstr (filename, ".gem"); |
|
+ if ( s ) *s = 0; |
|
if ( !strncmp(filename, pkgdir, strlen(pkgdir)) ) |
|
memdb_put(&files_on_disks, filename, disk); |
|
if ( atoi(disk) > max_disk_number )
|
|
|