git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v4 2/4] read-cache: add strcmp_offset function

From
Ggit@jeffhostetler.com <git@jeffhostetler.com>
Date
Apr 4, 2017, 21:08 UTC
Message-ID
<20170404210847.50860-3-git@jeffhostetler.com>
In-Reply-To
<20170404210847.50860-1-git@jeffhostetler.com>
From: Jeff Hostetler <jeffhost@microsoft.com>

Add strcmp_offset() function to also return the offset of the first change.

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
---
 cache.h      |  1 +
 read-cache.c | 29 +++++++++++++++++++++++++++++
 2 files changed, 30 insertions(+)
diff --git a/cache.h b/cache.h
index 80b6372..4d82490 100644
--- a/cache.h
+++ b/cache.h
@@ -574,6 +574,7 @@ extern int write_locked_index(struct index_state *, struct lock_file *lock, unsi
 extern int discard_index(struct index_state *);
 extern int unmerged_index(const struct index_state *);
 extern int verify_path(const char *path);
+extern int strcmp_offset(const char *s1_in, const char *s2_in, int *first_change);
 extern int index_dir_exists(struct index_state *istate, const char *name, int namelen);
 extern void adjust_dirname_case(struct index_state *istate, char *name);
 extern struct cache_entry *index_file_exists(struct index_state *istate, const char *name, int namelen, int igncase);
diff --git a/read-cache.c b/read-cache.c
index 9054369..b3fc77d 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -887,6 +887,35 @@ static int has_file_name(struct index_state *istate,
 	return retval;
 }
 
+
+/*
+ * Like strcmp(), but also return the offset of the first change.
+ */
+int strcmp_offset(const char *s1_in, const char *s2_in, int *first_change)
+{
+	const unsigned char *s1 = (const unsigned char *)s1_in;
+	const unsigned char *s2 = (const unsigned char *)s2_in;
+	int diff = 0;
+	int k;
+
+	*first_change = 0;
+	for (k=0; s1[k]; k++)
+		if ((diff = (s1[k] - s2[k])))
+			goto found_it;
+	if (!s2[k])
+		return 0;
+	diff = -1;
+
+found_it:
+	*first_change = k;
+	if (diff > 0)
+		return 1;
+	else if (diff < 0)
+		return -1;
+	else
+		return 0;
+}
+
 /*
  * Do we have another file with a pathname that is a proper
  * subset of the name we're trying to add?
-- 
2.9.3
Previous: git@jeffhostetler.comNext: git@jeffhostetler.com
Message 4 of 5 in “read-cache: speed up add_index_entry”
  1. 0/4 read-cache: speed up add_index_entrygit@jeffhostetler.com, Apr 4, 2017
  2. 1/4 p0004-read-tree: perf test to time read-treegit@jeffhostetler.com, Apr 4, 2017
  3. 4/4 read-cache: speed up add_index_entry during checkoutgit@jeffhostetler.com, Apr 4, 2017
  4. 2/4 read-cache: add strcmp_offset functiongit@jeffhostetler.com, Apr 4, 2017
  5. 3/4 test-strcmp-offset: created test for strcmp_offsetgit@jeffhostetler.com, Apr 4, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.