summaryrefslogtreecommitdiff
path: root/diffcore-pickaxe.c
diff options
context:
space:
mode:
Diffstat (limited to 'diffcore-pickaxe.c')
-rw-r--r--diffcore-pickaxe.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/diffcore-pickaxe.c b/diffcore-pickaxe.c
index 4347ec1084..4d66ba9b71 100644
--- a/diffcore-pickaxe.c
+++ b/diffcore-pickaxe.c
@@ -144,14 +144,13 @@ static void diffcore_pickaxe_grep(struct diff_options *o)
return;
}
-static unsigned int contains(struct diff_filespec *one,
- const char *needle, unsigned long len,
+static unsigned int contains(struct diff_filespec *one, struct diff_options *o,
regex_t *regexp, kwset_t kws)
{
unsigned int cnt;
unsigned long sz;
const char *data;
- if (!len)
+ if (!o->pickaxe[0])
return 0;
if (diff_populate_filespec(one, 0))
return 0;
@@ -175,14 +174,15 @@ static unsigned int contains(struct diff_filespec *one,
} else { /* Classic exact string match */
while (sz) {
- size_t offset = kwsexec(kws, data, sz, NULL);
+ struct kwsmatch kwsm;
+ size_t offset = kwsexec(kws, data, sz, &kwsm);
const char *found;
if (offset == -1)
break;
else
found = data + offset;
- sz -= found - data + len;
- data = found + len;
+ sz -= found - data + kwsm.size[0];
+ data = found + kwsm.size[0];
cnt++;
}
}
@@ -190,20 +190,20 @@ static unsigned int contains(struct diff_filespec *one,
return cnt;
}
-static int has_changes(struct diff_filepair *p, const char *needle,
- unsigned long len, regex_t *regexp, kwset_t kws)
+static int has_changes(struct diff_filepair *p, struct diff_options *o,
+ regex_t *regexp, kwset_t kws)
{
if (!DIFF_FILE_VALID(p->one)) {
if (!DIFF_FILE_VALID(p->two))
return 0; /* ignore unmerged */
/* created */
- return contains(p->two, needle, len, regexp, kws) != 0;
+ return contains(p->two, o, regexp, kws) != 0;
}
if (!DIFF_FILE_VALID(p->two))
- return contains(p->one, needle, len, regexp, kws) != 0;
+ return contains(p->one, o, regexp, kws) != 0;
if (!diff_unmodified_pair(p)) {
- return contains(p->one, needle, len, regexp, kws) !=
- contains(p->two, needle, len, regexp, kws);
+ return contains(p->one, o, regexp, kws) !=
+ contains(p->two, o, regexp, kws);
}
return 0;
}
@@ -241,7 +241,7 @@ static void diffcore_pickaxe_count(struct diff_options *o)
/* Showing the whole changeset if needle exists */
for (i = 0; i < q->nr; i++) {
struct diff_filepair *p = q->queue[i];
- if (has_changes(p, needle, len, regexp, kws))
+ if (has_changes(p, o, regexp, kws))
goto out; /* do not munge the queue */
}
@@ -257,7 +257,7 @@ static void diffcore_pickaxe_count(struct diff_options *o)
/* Showing only the filepairs that has the needle */
for (i = 0; i < q->nr; i++) {
struct diff_filepair *p = q->queue[i];
- if (has_changes(p, needle, len, regexp, kws))
+ if (has_changes(p, o, regexp, kws))
diff_q(&outq, p);
else
diff_free_filepair(p);