mirror of
https://github.com/git/git.git
synced 2025-01-22 23:43:31 +08:00
[PATCH] diffcore-pickaxe: switch to "counting" behaviour.
Instead of finding old/new pair that one side has and the other side does not have the specified string, find old/new pair that contains the specified string as a substring different number of times. This would still not catch a case where you introduce two static variable declarations and remove two static function definitions from a file with -S"static", but would make it behave a bit more intuitively. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
399144f21c
commit
2002eed6c9
@ -5,19 +5,30 @@
|
||||
#include "diff.h"
|
||||
#include "diffcore.h"
|
||||
|
||||
static int contains(struct diff_filespec *one,
|
||||
const char *needle, unsigned long len)
|
||||
static unsigned int contains(struct diff_filespec *one,
|
||||
const char *needle, unsigned long len)
|
||||
{
|
||||
unsigned int cnt;
|
||||
unsigned long offset, sz;
|
||||
const char *data;
|
||||
if (diff_populate_filespec(one, 0))
|
||||
return 0;
|
||||
|
||||
sz = one->size;
|
||||
data = one->data;
|
||||
for (offset = 0; offset + len <= sz; offset++)
|
||||
if (!strncmp(needle, data + offset, len))
|
||||
return 1;
|
||||
return 0;
|
||||
cnt = 0;
|
||||
|
||||
/* Yes, I've heard of strstr(), but the thing is *data may
|
||||
* not be NUL terminated. Sue me.
|
||||
*/
|
||||
for (offset = 0; offset + len <= sz; offset++) {
|
||||
/* we count non-overlapping occurrences of needle */
|
||||
if (!memcmp(needle, data + offset, len)) {
|
||||
offset += len - 1;
|
||||
cnt++;
|
||||
}
|
||||
}
|
||||
return cnt;
|
||||
}
|
||||
|
||||
void diffcore_pickaxe(const char *needle, int opts)
|
||||
|
Loading…
Reference in New Issue
Block a user