- Update to 1.7
PR: 141056 Submitted by: Alex de Kruijff <samesame@akruijff.dds.nl> (maintainer)
This commit is contained in:
parent
4ceea42659
commit
1f308318a4
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=245113
7 changed files with 4 additions and 353 deletions
|
@ -5,7 +5,7 @@
|
|||
# $FreeBSD$
|
||||
|
||||
PORTNAME= samesame
|
||||
PORTVERSION= 1.6
|
||||
PORTVERSION= 1.7
|
||||
CATEGORIES= sysutils
|
||||
MASTER_SITES= http://samesame.kruijff.org/ \
|
||||
${MASTER_SITE_LOCAL}
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
MD5 (samesame-1.6.tar.bz2) = 51dc947ff92934876f43a13851c5339f
|
||||
SHA256 (samesame-1.6.tar.bz2) = ad9af477390a3f4017dcfbc3bee646401d4138b2c648bae7668ca039b165cea1
|
||||
SIZE (samesame-1.6.tar.bz2) = 110794
|
||||
MD5 (samesame-1.7.tar.bz2) = 596a64f4592313f9559c7309c6fb2aad
|
||||
SHA256 (samesame-1.7.tar.bz2) = 5f98b1557d34d718b87b9f625a0ecf03f38fcf1d21e0c0283f31da017ebeb544
|
||||
SIZE (samesame-1.7.tar.bz2) = 111059
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
--- src/configure.h Sun Nov 15 02:23:34 2009
|
||||
+++ src/configure.h Mon Nov 16 02:34:14 2009
|
||||
@@ -9,7 +9,7 @@
|
||||
/* If READ_ONLY_ONCES is defined the code will read each file only ones.
|
||||
* If READ_ONLY_ONCES is not defined the code will use less memory.
|
||||
*/
|
||||
-#ifdef LOW_MEMORY_PROFILE
|
||||
+#ifndef LOW_MEMORY_PROFILE
|
||||
#define READ_ONLY_ONCES
|
||||
#endif // LOW_MEMORY_PROFILE
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
--- src/main.cpp Sun Nov 15 00:06:17 2009
|
||||
+++ src/main.cpp Mon Nov 16 14:09:26 2009
|
||||
@@ -375,8 +375,12 @@
|
||||
size_t oldMinSize = minSize;
|
||||
Holder holder;
|
||||
|
||||
- // Reserve 1M memory for later (better memory management)
|
||||
- char *dummy = new char[1048576];
|
||||
+ // Reserve memory for later (better memory management)
|
||||
+#ifdef LOW_MEMORY_PROFILE
|
||||
+ char *dummy = new char[1048576]; // 1 MB
|
||||
+#else // LOW_MEMORY_PROFILE
|
||||
+ char *dummy = new char[5 * 1048576]; // 5 MB
|
||||
+#endif // LOW_MEMORY_PROFILE
|
||||
|
||||
// Stage1 - reading the input
|
||||
if (S_VERBOSE_LEVEL2(flags))
|
|
@ -1,94 +0,0 @@
|
|||
--- src/matchmatrix.cpp Sat Nov 14 04:27:23 2009
|
||||
+++ src/matchmatrix.cpp Mon Nov 16 02:34:10 2009
|
||||
@@ -98,6 +98,50 @@
|
||||
return arr[i][j - i];
|
||||
}
|
||||
|
||||
+size_t MatchMatrix::getEqual(size_t i) const throw()
|
||||
+{
|
||||
+ if (i > n)
|
||||
+ {
|
||||
+ fprintf(stderr, "%s:%u i (%u) must be smaller then %u\n",
|
||||
+ __FILE__, __LINE__, i, n);
|
||||
+ exit(EXIT_FAILURE);
|
||||
+ }
|
||||
+ return equal[i];
|
||||
+}
|
||||
+
|
||||
+int MatchMatrix::getFd(size_t i) const throw()
|
||||
+{
|
||||
+ if (i > n)
|
||||
+ {
|
||||
+ fprintf(stderr, "%s:%u i (%u) must be smaller then %u\n",
|
||||
+ __FILE__, __LINE__, i, n);
|
||||
+ exit(EXIT_FAILURE);
|
||||
+ }
|
||||
+ return fd[i];
|
||||
+}
|
||||
+
|
||||
+void *MatchMatrix::getMm(size_t i) const throw()
|
||||
+{
|
||||
+ if (i > n)
|
||||
+ {
|
||||
+ fprintf(stderr, "%s:%u i (%u) must be smaller then %u\n",
|
||||
+ __FILE__, __LINE__, i, n);
|
||||
+ exit(EXIT_FAILURE);
|
||||
+ }
|
||||
+ return mm[i];
|
||||
+}
|
||||
+
|
||||
+void MatchMatrix::increaseEqual(size_t i) const throw()
|
||||
+{
|
||||
+ if (i > n)
|
||||
+ {
|
||||
+ fprintf(stderr, "%s:%u i (%u) must be smaller then %u\n",
|
||||
+ __FILE__, __LINE__, i, n);
|
||||
+ exit(EXIT_FAILURE);
|
||||
+ }
|
||||
+ ++equal[i];
|
||||
+}
|
||||
+
|
||||
void MatchMatrix::set(size_t i, size_t j, int result) throw()
|
||||
{
|
||||
if (i > n)
|
||||
@@ -114,6 +158,40 @@
|
||||
}
|
||||
arr[i][j - i] = result;
|
||||
}
|
||||
+
|
||||
+void MatchMatrix::setEqual(size_t i, size_t x) throw()
|
||||
+{
|
||||
+ if (i > n)
|
||||
+ {
|
||||
+ fprintf(stderr, "%s:%u i (%u) must be smaller then %u\n",
|
||||
+ __FILE__, __LINE__, i, n);
|
||||
+ exit(EXIT_FAILURE);
|
||||
+ }
|
||||
+ equal[i] = x;
|
||||
+}
|
||||
+
|
||||
+int MatchMatrix::setFd(size_t i, int x) throw()
|
||||
+{
|
||||
+ if (i > n)
|
||||
+ {
|
||||
+ fprintf(stderr, "%s:%u i (%u) must be smaller then %u\n",
|
||||
+ __FILE__, __LINE__, i, n);
|
||||
+ exit(EXIT_FAILURE);
|
||||
+ }
|
||||
+ return fd[i] = x;
|
||||
+}
|
||||
+
|
||||
+void MatchMatrix::setMm(size_t i, void *x) throw()
|
||||
+{
|
||||
+ if (i > n)
|
||||
+ {
|
||||
+ fprintf(stderr, "%s:%u i (%u) must be smaller then %u\n",
|
||||
+ __FILE__, __LINE__, i, n);
|
||||
+ exit(EXIT_FAILURE);
|
||||
+ }
|
||||
+ mm[i] = x;
|
||||
+}
|
||||
+
|
||||
#endif // DEBUG
|
||||
|
||||
void MatchMatrix::reset(size_t n) throw()
|
|
@ -1,59 +0,0 @@
|
|||
--- src/matchmatrix.h Fri Nov 13 18:44:01 2009
|
||||
+++ src/matchmatrix.h Mon Nov 16 02:30:30 2009
|
||||
@@ -28,12 +28,11 @@
|
||||
{
|
||||
size_t n;
|
||||
signed char **arr;
|
||||
-
|
||||
-public:
|
||||
size_t *equal;
|
||||
int *fd;
|
||||
void **mm;
|
||||
-
|
||||
+
|
||||
+public:
|
||||
/**
|
||||
* Creates a MatchMatrix that is able to store the match results of
|
||||
* n elements.
|
||||
@@ -46,12 +45,41 @@
|
||||
int get(size_t i, size_t j) const throw()
|
||||
{ return arr[i][j - i]; }
|
||||
|
||||
+ size_t getEqual(size_t i) const throw()
|
||||
+ { return equal[i]; }
|
||||
+
|
||||
+ int getFd(size_t i) const throw()
|
||||
+ { return fd[i]; }
|
||||
+
|
||||
+ void *getMm(size_t i) const throw()
|
||||
+ { return mm[i]; }
|
||||
+
|
||||
+ void increaseEqual(size_t i) const throw()
|
||||
+ { ++equal[i]; }
|
||||
+
|
||||
void set(size_t i, size_t j, int result) throw()
|
||||
{ arr[i][j - i] = result; }
|
||||
|
||||
+ void setEqual(size_t i, size_t x) throw()
|
||||
+ { equal[i] = x; }
|
||||
+
|
||||
+ int setFd(size_t i, int x) throw()
|
||||
+ { return fd[i] = x; }
|
||||
+
|
||||
+ void setMm(size_t i, void *x) throw()
|
||||
+ { mm[i] = x; }
|
||||
#else // DEBUG
|
||||
int get(size_t i, size_t j) const throw();
|
||||
+ size_t getEqual(size_t i) const throw();
|
||||
+ int getFd(size_t i) const throw();
|
||||
+ void *getMm(size_t i) const throw();
|
||||
+
|
||||
+ void increaseEqual(size_t i) const throw();
|
||||
+
|
||||
void set(size_t i, size_t j, int result) throw();
|
||||
+ void setEqual(size_t i, size_t x) throw();
|
||||
+ int setFd(size_t i, int x) throw();
|
||||
+ void setMm(size_t i, void *x) throw();
|
||||
#endif // DEBUG
|
||||
|
||||
/**
|
|
@ -1,168 +0,0 @@
|
|||
--- src/sizegroup.cpp Sat Nov 14 23:34:59 2009
|
||||
+++ src/sizegroup.cpp Mon Nov 16 02:29:51 2009
|
||||
@@ -36,7 +36,7 @@
|
||||
static struct SameGroupBuffer
|
||||
{
|
||||
size_t n, size, pagesize;
|
||||
- char *buffer;
|
||||
+ char *buf;
|
||||
|
||||
SameGroupBuffer();
|
||||
~SameGroupBuffer();
|
||||
@@ -53,12 +53,12 @@
|
||||
#else // LOW_MEMORY_PROFILE
|
||||
size = 1 << 24;
|
||||
#endif // LOW_MEMORY_PROFILE
|
||||
- buffer = new char[size];
|
||||
+ buf = new char[size];
|
||||
}
|
||||
|
||||
SameGroupBuffer::~SameGroupBuffer()
|
||||
{
|
||||
- delete buffer;
|
||||
+ delete buf;
|
||||
}
|
||||
|
||||
void SameGroupBuffer::setN(size_t n)
|
||||
@@ -77,7 +77,7 @@
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
#endif // DEBUG
|
||||
- return buffer + index * pagesize;
|
||||
+ return buf + index * pagesize;
|
||||
}
|
||||
#endif // READ_ONLY_ONCES
|
||||
|
||||
@@ -136,7 +136,7 @@
|
||||
__FILE__, __LINE__);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
-#endif
|
||||
+#endif // DEBUG
|
||||
for (size_t i = 0; i < n; ++i)
|
||||
hash[i]->sort(compareFilename);
|
||||
#ifdef DEBUG
|
||||
@@ -147,7 +147,7 @@
|
||||
__FILE__, __LINE__);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
-#endif
|
||||
+#endif // DEBUG
|
||||
hash.sort(compare);
|
||||
}
|
||||
|
||||
@@ -188,8 +188,6 @@
|
||||
int (&f)(const SizeGroup &, const FileGroup &, const Filename &,
|
||||
const FileGroup &, const Filename &, int),
|
||||
size_t fileSize, size_t &nIdenticals,
|
||||
-#ifndef READ_ONLY_ONCES
|
||||
-#endif // READ_ONLY_ONCES
|
||||
int flags, size_t &i, size_t &j, size_t &n,
|
||||
FileGroup &left, FileGroup &right)
|
||||
{
|
||||
@@ -213,7 +211,7 @@
|
||||
|
||||
#ifndef READ_ONLY_ONCES
|
||||
// Do a physically check if we couldn't use logic
|
||||
- if (!(result))
|
||||
+ if (!result)
|
||||
{
|
||||
result = left.fcmp(right, fileSize);
|
||||
if (result > 0 && result & FILE_IDENTICAL)
|
||||
@@ -306,10 +304,6 @@
|
||||
* If READ_ONLY_ONCES is not defined the code will use less memory.
|
||||
*/
|
||||
#ifdef READ_ONLY_ONCES
|
||||
- size_t *equal = match.equal;
|
||||
- int *fd = match.fd;
|
||||
- void **mm = match.mm;
|
||||
-
|
||||
// Open files
|
||||
buffer.setN(n);
|
||||
for (size_t i = 0; i < n; ++i)
|
||||
@@ -333,12 +327,15 @@
|
||||
if (preCheck != NULL && preCheck(*this, *hash[i], *hash[j]))
|
||||
{
|
||||
match.set(i, j, FILE_DIFFERENT);
|
||||
- ++equal[i], ++equal[j];
|
||||
+ match.increaseEqual(i);
|
||||
+ match.increaseEqual(j);
|
||||
}
|
||||
|
||||
// Open files
|
||||
- if (equal[i] < n -1 && (fd[i] = hash[i]->open(O_RDONLY)) < 0)
|
||||
+ if (match.getEqual(i) < n -1 &&
|
||||
+ match.setFd(i, hash[i]->open(O_RDONLY)) < 0)
|
||||
match.set(i, n-1, FILE_OPEN1_ERROR);
|
||||
+
|
||||
}
|
||||
|
||||
// Compare the files
|
||||
@@ -350,50 +347,51 @@
|
||||
|
||||
// read pages
|
||||
for (size_t i = 0; i < n; ++i)
|
||||
- if (match.get(i, n-1) >= 0 && equal[i] < n - 1)
|
||||
+ if (match.get(i, n-1) >= 0 && match.getEqual(i) < n - 1)
|
||||
if (USE_MMAP(fileSize))
|
||||
{
|
||||
- mm[i] = mmap(0, size, PROT_READ, MAP_SHARED, fd[i], offset);
|
||||
- mm[i] = mmap(0, size, PROT_READ, MAP_SHARED, fd[i], offset);
|
||||
- if (mm[i] == MAP_FAILED)
|
||||
+ void *mm = mmap(0, size, PROT_READ, MAP_SHARED, match.getFd(i), offset);
|
||||
+ match.setMm(i, mm);
|
||||
+ if (mm == MAP_FAILED)
|
||||
match.set(i, n-1, FILE_READ1_ERROR);
|
||||
- posix_madvise(mm[i], size, POSIX_MADV_WILLNEED);
|
||||
+ posix_madvise(mm, size, POSIX_MADV_WILLNEED);
|
||||
}
|
||||
- else if (read(fd[i], buffer[i], size) < 0)
|
||||
+ else if (read(match.getFd(i), buffer[i], size) < 0)
|
||||
match.set(i, n-1, FILE_READ1_ERROR);
|
||||
|
||||
// compare pages
|
||||
for (size_t i = 0; i < n; ++i)
|
||||
{
|
||||
- if (equal[i] == n - 1 || match.get(i, n-1) < 0)
|
||||
+ if (match.getEqual(i) == n - 1 || match.get(i, n-1) < 0)
|
||||
continue;
|
||||
for (size_t j = i + 1; j < n; ++j)
|
||||
if (match.get(i, j) == FILE_DIFFERENT)
|
||||
continue;
|
||||
else if (memcmp(
|
||||
- USE_MMAP(fileSize) ? mm[i] : buffer[i],
|
||||
- USE_MMAP(fileSize) ? mm[j] : buffer[j],
|
||||
+ USE_MMAP(fileSize) ? match.getMm(i) : buffer[i],
|
||||
+ USE_MMAP(fileSize) ? match.getMm(j) : buffer[j],
|
||||
size) != 0)
|
||||
{
|
||||
match.set(i, j, FILE_DIFFERENT);
|
||||
- ++equal[i], ++equal[j];
|
||||
+ match.increaseEqual(i);
|
||||
+ match.increaseEqual(j);
|
||||
}
|
||||
}
|
||||
|
||||
// unread?
|
||||
for (size_t i = 0; i < n; ++i)
|
||||
- if (mm[i] != NULL)
|
||||
+ if (match.getMm(i) != NULL)
|
||||
{
|
||||
- posix_madvise(mm[i], size, POSIX_MADV_NORMAL);
|
||||
- munmap(mm[i], size);
|
||||
- mm[i] = NULL;
|
||||
+ posix_madvise(match.getMm(i), size, POSIX_MADV_NORMAL);
|
||||
+ munmap(match.getMm(i), size);
|
||||
+ match.setMm(i, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
// close files
|
||||
for (size_t i = 0; i < n; ++i)
|
||||
- if (fd[i] != 0)
|
||||
- close(fd[i]);
|
||||
+ if (!match.getFd(i) != 0)
|
||||
+ close(match.getFd(i));
|
||||
|
||||
// mark identicals
|
||||
for (size_t i = 0; i < n; ++i)
|
Loading…
Reference in a new issue