|
diff -dur mine-0.24/check.c mine-0.24-patch/check.c
|
|
--- mine-0.24/check.c 2005-09-30 12:34:36.000000000 +0200
|
|
+++ mine-0.24-patch/check.c 2006-04-27 20:14:38.000000000 +0200
|
|
@@ -72,9 +72,14 @@
|
|
strtok(buffer, " \t\n");
|
|
filename = strtok(NULL, "\n");
|
|
|
|
- if ( md5sum_check(root, filename) ) {
|
|
- printf("Modified/duplicate "
|
|
- "file: %s\n", filename);
|
|
+ int result = 0;
|
|
+ if ( result = md5sum_check(root, filename) ) {
|
|
+ switch (result) {
|
|
+ case MD5SUM_CHECK_DUPLICATE: printf("Duplicate "); break;
|
|
+ case MD5SUM_CHECK_MODIFIED: printf("Modified "); break;
|
|
+ case MD5SUM_CHECK_SHARED: printf("Shared "); break;
|
|
+ }
|
|
+ printf("file: %s\n", filename);
|
|
modified++;
|
|
}
|
|
}
|
|
diff -dur mine-0.24/install.c mine-0.24-patch/install.c
|
|
--- mine-0.24/install.c 2006-04-27 21:06:40.000000000 +0200
|
|
+++ mine-0.24-patch/install.c 2006-04-27 20:15:52.000000000 +0200
|
|
@@ -256,6 +256,7 @@
|
|
unlink(buffer3);
|
|
}
|
|
|
|
+ int result = 0;
|
|
if (patterns && glob_check(patterns, filename)) {
|
|
if ( mode_verbose ) {
|
|
printf("Exclude glob "
|
|
@@ -265,15 +266,22 @@
|
|
if (TH_ISREG(t) && tar_skip_regfile(t) != 0)
|
|
goto error_errno;
|
|
}
|
|
- else if ( ! mode_force && md5sum_check(root, filename) ) {
|
|
+ else if ( ! mode_force && (result = md5sum_check(root, filename)) ) {
|
|
+ if ( ! mode_test || ! mode_verbose )
|
|
+ printf("%s: ", pname);
|
|
+ printf("WARNING: Skip ");
|
|
+ switch (result) {
|
|
+ case MD5SUM_CHECK_DUPLICATE: printf("duplicate "); break;
|
|
+ case MD5SUM_CHECK_MODIFIED: printf("modified "); break;
|
|
+ case MD5SUM_CHECK_SHARED: printf("shared "); break;
|
|
+ }
|
|
+ printf("file %s", filename);
|
|
if ( mode_test && mode_verbose ) {
|
|
- printf("WARNING: Skip modified/duplicate "
|
|
- "file %s:\n", filename);
|
|
+ printf(":\n");
|
|
th_print_long_ls(t);
|
|
- } else {
|
|
- printf("%s: WARNING: Skip modified/duplicate "
|
|
- "file: %s\n", pname, filename);
|
|
- }
|
|
+ } else
|
|
+ printf(".\n");
|
|
+
|
|
if ( mode_test ) {
|
|
if (TH_ISREG(t) && tar_skip_regfile(t) != 0)
|
|
goto error_errno;
|
|
diff -dur mine-0.24/md5sum.c mine-0.24-patch/md5sum.c
|
|
--- mine-0.24/md5sum.c 2005-08-09 12:57:29.000000000 +0200
|
|
+++ mine-0.24-patch/md5sum.c 2006-04-27 21:11:22.000000000 +0200
|
|
@@ -20,6 +20,7 @@
|
|
#include <stdio.h>
|
|
#include <dirent.h>
|
|
#include <string.h>
|
|
+#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <unistd.h>
|
|
|
|
@@ -37,35 +38,39 @@
|
|
struct stat statbuf;
|
|
|
|
snprintf(realfilename, 1024, "%s/%s", root, filename);
|
|
- return (stat(realfilename, &statbuf) != 0 || S_ISFIFO(statbuf.st_mode))
|
|
- ? "" : md5_file(realfilename);
|
|
+ if (stat(realfilename, &statbuf) != 0)
|
|
+ return "";
|
|
+ else if (!S_ISREG(statbuf.st_mode))
|
|
+ return "X";
|
|
+ else
|
|
+ return md5_file(realfilename);
|
|
}
|
|
|
|
-/* Returns 1 if file is duplicate, 2 if file is modified. */
|
|
+/* Returns if file is unmodified, modified, duplicate, or shared. */
|
|
int md5sum_check(char * root, char * filename)
|
|
{
|
|
char *md5_f, *md5_d;
|
|
|
|
md5_f = md5sum_create(root, filename);
|
|
md5_d = memdb_get(&md5_memdb, filename);
|
|
-
|
|
- if (md5_f == NULL || strcmp(md5_f, "") == 0)
|
|
- return 0;
|
|
+
|
|
+ if (strcmp(md5_f, "") == 0)
|
|
+ return MD5SUM_CHECK_OK;
|
|
else if (md5_d == NULL)
|
|
- return 1;
|
|
- else if (strcmp(md5_f, md5_d) == 0)
|
|
- return 0;
|
|
+ return MD5SUM_CHECK_DUPLICATE;
|
|
+ else if (strcmp(md5_f, md5_d) == 0 || strcmp(md5_d, "X") == 0)
|
|
+ return MD5SUM_CHECK_OK;
|
|
+ else if (strcmp(md5_d, "Duplicate entry") == 0)
|
|
+ return MD5SUM_CHECK_SHARED;
|
|
else
|
|
- return 2;
|
|
+ return MD5SUM_CHECK_MODIFIED;
|
|
}
|
|
|
|
void md5sum_initdb(char * root, int verbose)
|
|
{
|
|
struct dirent *md5_dent;
|
|
- char buffer[1024], buffer2[1024];
|
|
+ char buffer[1024];
|
|
char *md5sum, *filename;
|
|
- const char const *admdirs[6] =
|
|
- {"cksums", "dependencies", "descs", "flists", "md5sums", "packages"};
|
|
FILE *f;
|
|
DIR *d;
|
|
|
|
@@ -81,16 +86,6 @@
|
|
root, md5_dent->d_name);
|
|
f = fopen(buffer, "r");
|
|
if ( f != NULL ) {
|
|
- /* Add the /var/adm files of each package to the
|
|
- md5sum memdb so md5sum_check() recognizes them. */
|
|
- int n;
|
|
- for (n = 0; n < 6; n++) {
|
|
- snprintf(buffer2, 1024, "var/adm/%s/%s",
|
|
- admdirs[n], md5_dent->d_name);
|
|
- memdb_put(&md5_memdb, buffer2,
|
|
- md5sum_create(root, buffer2));
|
|
- }
|
|
-
|
|
while (fgets(buffer, 1024, f) != NULL) {
|
|
md5sum = strtok(buffer, " \t\n");
|
|
filename = strtok(NULL, "\n");
|
|
diff -dur mine-0.24/md5sum.h mine-0.24-patch/md5sum.h
|
|
--- mine-0.24/md5sum.h 2005-03-23 09:51:06.000000000 +0100
|
|
+++ mine-0.24-patch/md5sum.h 2006-04-27 20:14:38.000000000 +0200
|
|
@@ -20,6 +20,11 @@
|
|
#ifndef MD5SUM_H
|
|
#define MD5SUM_H
|
|
|
|
+#define MD5SUM_CHECK_OK 0
|
|
+#define MD5SUM_CHECK_DUPLICATE 1
|
|
+#define MD5SUM_CHECK_MODIFIED 2
|
|
+#define MD5SUM_CHECK_SHARED 3
|
|
+
|
|
char * md5sum_create(char * root, char * filename);
|
|
int md5sum_check(char * root, char * filename);
|
|
void md5sum_initdb(char * root, int verbose);
|
|
diff -dur mine-0.24/remove.c mine-0.24-patch/remove.c
|
|
--- mine-0.24/remove.c 2005-08-09 12:57:29.000000000 +0200
|
|
+++ mine-0.24-patch/remove.c 2006-04-27 20:14:38.000000000 +0200
|
|
@@ -120,11 +120,17 @@
|
|
flist = (flist_tmp=flist)->next;
|
|
free(flist_tmp);
|
|
|
|
- if ( ! mode_force && md5sum_check(root, filename) ) {
|
|
+ int result = 0;
|
|
+ if ( ! mode_force && (result = md5sum_check(root, filename)) ) {
|
|
if ( ! mode_test || ! mode_verbose )
|
|
printf("%s: ", package);
|
|
- printf("WARNING: Skip modified/duplicate "
|
|
- "file: %s\n", filename);
|
|
+ printf("WARNING: Skip ");
|
|
+ switch (result) {
|
|
+ case MD5SUM_CHECK_DUPLICATE: printf("duplicate "); break;
|
|
+ case MD5SUM_CHECK_MODIFIED: printf("modified "); break;
|
|
+ case MD5SUM_CHECK_SHARED: printf("shared "); break;
|
|
+ }
|
|
+ printf("file %s:\n", filename);
|
|
}
|
|
else
|
|
if ( mode_test ) {
|