$OpenBSD: patch-src_util_c,v 1.2 2009/09/14 17:19:29 naddy Exp $ --- src/util.c.orig Wed Aug 19 14:39:09 2009 +++ src/util.c Mon Sep 14 19:15:36 2009 @@ -15,6 +15,9 @@ #include #include #include +#if defined(__OpenBSD__) +#include +#endif #include #include #include @@ -145,7 +148,7 @@ void start_application(const char *command) { shell = "/bin/sh"; /* This is the child */ - execl(shell, shell, "-c", command, NULL); + execl(shell, shell, "-c", command, (void *)NULL); /* not reached */ } exit(0); @@ -466,3 +469,43 @@ done: FREE(to_title_ucs); return matching; } + + +#if defined(__OpenBSD__) + +/* + * Taken from FreeBSD + * Find the first occurrence of the byte string s in byte string l. + */ + +void * +memmem(const void *l, size_t l_len, const void *s, size_t s_len) +{ + register char *cur, *last; + const char *cl = (const char *)l; + const char *cs = (const char *)s; + + /* we need something to compare */ + if (l_len == 0 || s_len == 0) + return NULL; + + /* "s" must be smaller or equal to "l" */ + if (l_len < s_len) + return NULL; + + /* special case where s_len == 1 */ + if (s_len == 1) + return memchr(l, (int)*cs, l_len); + + /* the last position where its possible to find "s" in "l" */ + last = (char *)cl + l_len - s_len; + + for (cur = (char *)cl; cur <= last; cur++) + if (cur[0] == cs[0] && memcmp(cur, cs, s_len) == 0) + return cur; + + return NULL; +} + +#endif +