summaryrefslogtreecommitdiff
path: root/dev-libs/cyrus-sasl/files/cyrus-sasl-2.1.27-memmem.patch
blob: 158529dcb5f504392d9b547ea0b5614503fa4a0f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
auth_rimap: provide naive memmem implementation if missing

read_response uses memmem, which is not available on e.g. Solaris 10

Bug: https://github.com/cyrusimap/cyrus-sasl/pull/551
Signed-off-by: Fabian Groffen <grobian@gentoo.org>

--- a/saslauthd/auth_rimap.c
+++ b/saslauthd/auth_rimap.c
@@ -367,6 +367,32 @@
 /* END FUNCTION: process_login_reply */
 
 
+#ifndef HAVE_MEMMEM
+static void *memmem(
+		const void *big, size_t big_len,
+		const void *little, size_t little_len)
+{
+	const char *bp = (const char *)big;
+	const char *lp = (const char *)little;
+	size_t l;
+
+	if (big_len < little_len || little_len == 0 || big_len == 0)
+		return NULL;
+
+	while (big_len > 0) {
+		for (l = 0; l < little_len; l++) {
+			if (bp[l] != lp[l])
+				break;
+		}
+		if (l == little_len)
+			return (void *)bp;
+		bp++;
+	}
+
+	return NULL;
+}
+#endif
+
 static int read_response(int s, char *rbuf, int buflen, const char *tag)
 {
     int rc = 0;
--- a/configure.ac
+++ b/configure.ac
@@ -1292,7 +1292,7 @@
 
 #AC_FUNC_MEMCMP
 #AC_FUNC_VPRINTF
-AC_CHECK_FUNCS(gethostname getdomainname getpwnam getspnam gettimeofday inet_aton memcpy mkdir select socket strchr strdup strerror strspn strstr strtol jrand48 getpassphrase asprintf strlcat strlcpy)
+AC_CHECK_FUNCS(gethostname getdomainname getpwnam getspnam gettimeofday inet_aton memcpy memmem mkdir select socket strchr strdup strerror strspn strstr strtol jrand48 getpassphrase asprintf strlcat strlcpy)
 
 if test $ac_cv_func_getspnam = yes; then
 	AC_MSG_CHECKING(if getpwnam_r/getspnam_r take 5 arguments)