mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
Add simplistic reimplementation of strcasestr to compat library
While all systems that I have access to support strcasestr, it is in fact not part of POSIX. So here's a fallback reimplementation based on POSIX functions. Signed-off-by: Dirk Hohndel <hohndel@infradead.org> Tested-by: Tomas Carnecky <tom@dbservice.com> (on OpenSolaris snv_134)
This commit is contained in:
parent
25f3185ad0
commit
d09154465a
5 changed files with 76 additions and 2 deletions
|
@ -8,3 +8,7 @@ notmuch_compat_srcs :=
|
|||
ifneq ($(HAVE_GETLINE),1)
|
||||
notmuch_compat_srcs += $(dir)/getline.c $(dir)/getdelim.c
|
||||
endif
|
||||
|
||||
ifneq ($(HAVE_STRCASESTR),1)
|
||||
notmuch_compat_srcs += $(dir)/strcasestr.c
|
||||
endif
|
||||
|
|
|
@ -38,4 +38,8 @@ getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp);
|
|||
|
||||
#endif /* !HAVE_GETLINE */
|
||||
|
||||
#if !HAVE_STRCASESTR
|
||||
char* strcasestr(const char *haystack, const char *needle);
|
||||
#endif /* !HAVE_STRCASESTR */
|
||||
|
||||
#endif /* NOTMUCH_COMPAT_H */
|
||||
|
|
10
compat/have_strcasestr.c
Normal file
10
compat/have_strcasestr.c
Normal file
|
@ -0,0 +1,10 @@
|
|||
#define _GNU_SOURCE
|
||||
#include <strings.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
char *found;
|
||||
const char *haystack, *needle;
|
||||
|
||||
found = strcasestr(haystack, needle);
|
||||
}
|
40
compat/strcasestr.c
Normal file
40
compat/strcasestr.c
Normal file
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* slow simplistic reimplementation of strcasestr for systems that
|
||||
* don't include it in their library
|
||||
*
|
||||
* based on a GPL implementation in OpenTTD found under GPL v2
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation, version 2.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301, USA. */
|
||||
|
||||
/* Imported into notmuch by Dirk Hohndel - original author unknown. */
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "compat.h"
|
||||
|
||||
char *strcasestr(const char *haystack, const char *needle)
|
||||
{
|
||||
size_t hay_len = strlen(haystack);
|
||||
size_t needle_len = strlen(needle);
|
||||
while (hay_len >= needle_len) {
|
||||
if (strncasecmp(haystack, needle, needle_len) == 0)
|
||||
return (char *) haystack;
|
||||
|
||||
haystack++;
|
||||
hay_len--;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
20
configure
vendored
20
configure
vendored
|
@ -310,6 +310,17 @@ else
|
|||
fi
|
||||
rm -f compat/have_getline
|
||||
|
||||
printf "Checking for strcasestr... "
|
||||
if ${CC} -o compat/have_strcasestr compat/have_strcasestr.c > /dev/null 2>&1
|
||||
then
|
||||
printf "Yes.\n"
|
||||
have_strcasestr=1
|
||||
else
|
||||
printf "No (will use our own instead).\n"
|
||||
have_strcasestr=0
|
||||
fi
|
||||
rm -f compat/have_strcasestr
|
||||
|
||||
cat <<EOF
|
||||
|
||||
All required packages were found. You may now run the following
|
||||
|
@ -384,6 +395,10 @@ zsh_completion_dir = \$(prefix)/share/zsh/functions/Completion/Unix
|
|||
# build its own version)
|
||||
HAVE_GETLINE = ${have_getline}
|
||||
|
||||
# Whether the strcasestr function is available (if not, then notmuch will
|
||||
# build its own version)
|
||||
HAVE_STRCASESTR = ${have_strcasestr}
|
||||
|
||||
# Flags needed to compile and link against Xapian
|
||||
XAPIAN_CXXFLAGS = ${xapian_cxxflags}
|
||||
XAPIAN_LDFLAGS = ${xapian_ldflags}
|
||||
|
@ -405,9 +420,10 @@ VALGRIND_CFLAGS = ${valgrind_cflags}
|
|||
# Combined flags for compiling and linking against all of the above
|
||||
CONFIGURE_CFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\
|
||||
\$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
|
||||
\$(VALGRIND_CFLAGS)
|
||||
\$(VALGRIND_CFLAGS) -DHAVE_STRCASESTR=\$(HAVE_STRCASESTR)
|
||||
CONFIGURE_CXXFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\
|
||||
\$(TALLOC_CFLAGS) -DHAVE_VALGRIND=\$(HAVE_VALGRIND) \\
|
||||
\$(VALGRIND_CFLAGS) \$(XAPIAN_CXXFLAGS)
|
||||
\$(VALGRIND_CFLAGS) \$(XAPIAN_CXXFLAGS) \\
|
||||
-DHAVE_STRCASESTR=\$(HAVE_STRCASESTR)
|
||||
CONFIGURE_LDFLAGS = \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(XAPIAN_LDFLAGS)
|
||||
EOF
|
||||
|
|
Loading…
Reference in a new issue