summaryrefslogtreecommitdiff
path: root/compat/memmem.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2007-09-10 07:14:50 (GMT)
committerJunio C Hamano <gitster@pobox.com>2007-09-10 07:14:50 (GMT)
commit6972ab7ae10a205bbc05b98408a36403915a9c39 (patch)
tree755ab51db764a7d35e9546eb30a5d4440291b014 /compat/memmem.c
parent9784c5c53e0765bc9a0c973ab10aaf0734d535c3 (diff)
parent20fbfd869fe8faae0ce4573b60b540024db7385d (diff)
downloadgit-6972ab7ae10a205bbc05b98408a36403915a9c39.zip
git-6972ab7ae10a205bbc05b98408a36403915a9c39.tar.gz
git-6972ab7ae10a205bbc05b98408a36403915a9c39.tar.bz2
Merge branch 'rs/archive'
* rs/archive: archive - leakfix for format_subst() Define NO_MEMMEM on Darwin as it lacks the function archive: rename attribute specfile to export-subst archive: specfile syntax change: "$Format:%PLCHLDR$" instead of just "%PLCHLDR" (take 2) add memmem() Remove unused function convert_sha1_file() archive: specfile support (--pretty=format: in archive files) Export format_commit_message()
Diffstat (limited to 'compat/memmem.c')
-rw-r--r--compat/memmem.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/compat/memmem.c b/compat/memmem.c
new file mode 100644
index 0000000..cd0d877
--- /dev/null
+++ b/compat/memmem.c
@@ -0,0 +1,29 @@
+#include "../git-compat-util.h"
+
+void *gitmemmem(const void *haystack, size_t haystack_len,
+ const void *needle, size_t needle_len)
+{
+ const char *begin = haystack;
+ const char *last_possible = begin + haystack_len - needle_len;
+
+ /*
+ * The first occurrence of the empty string is deemed to occur at
+ * the beginning of the string.
+ */
+ if (needle_len == 0)
+ return (void *)begin;
+
+ /*
+ * Sanity check, otherwise the loop might search through the whole
+ * memory.
+ */
+ if (haystack_len < needle_len)
+ return NULL;
+
+ for (; begin <= last_possible; begin++) {
+ if (!memcmp(begin, needle, needle_len))
+ return (void *)begin;
+ }
+
+ return NULL;
+}