summaryrefslogtreecommitdiff
path: root/src/metaentry.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/metaentry.c')
-rw-r--r--src/metaentry.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/metaentry.c b/src/metaentry.c
index 7e90290..37069b0 100644
--- a/src/metaentry.c
+++ b/src/metaentry.c
@@ -875,7 +875,7 @@ mentry_compare(struct metaentry *left, struct metaentry *right, msettings *st)
}
/* Compares lists of real and stored metadata and calls pfunc for each */
-void
+int
mentries_compare(struct metahash *mhashreal,
struct metahash *mhashstored,
void (*pfunc)
@@ -884,10 +884,11 @@ mentries_compare(struct metahash *mhashreal,
{
struct metaentry *real, *stored;
int key;
+ int cmp, diffs = 0;
if (!mhashreal || !mhashstored) {
msg(MSG_ERROR, "%s called with empty list\n", __func__);
- return;
+ return -1;
}
for (key = 0; key < HASH_INDEXES; key++) {
@@ -895,18 +896,27 @@ mentries_compare(struct metahash *mhashreal,
stored = mentry_find(real->path, mhashstored);
if (!stored)
- pfunc(real, NULL, DIFF_ADDED);
+ cmp = DIFF_ADDED;
else
- pfunc(real, stored, mentry_compare(real, stored, st));
+ cmp = mentry_compare(real, stored, st);
+
+ if (cmp > 0)
+ ++diffs;
+
+ pfunc(real, stored, cmp);
}
for (stored = mhashstored->bucket[key]; stored; stored = stored->next) {
real = mentry_find(stored->path, mhashreal);
- if (!real)
+ if (!real) {
+ ++diffs;
pfunc(NULL, stored, DIFF_DELE);
+ }
}
}
+
+ return diffs;
}
/* Dumps given metadata */