mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-23 20:03:31 +01:00
Don't redefine str(n)casecmp on windows unless they're missing
When we do redefine them, use inline functions instead of #define. This fixes a latent code problem in our redefinition of these functions, which was exposed by our refactoring: Previously, we would #define strcasecmp after string.h was included, so nothing bad would happen. But when we refactored, we would sometimes #define it first, which was a problem on mingw, whose headers contain (approximately): inline int strcasecmp (const char *a, const char *b) { return _stricmp(a,b); } Our define turned this into: inline int _stricmp(const char *a, const char *b) { return _stricmp(a,b); } And GCC would correctly infer that this function would loop forever, rather than actually comparing anything. This caused bug 26594. Fixes bug 26594; bug not in any released version of Tor.
This commit is contained in:
parent
cb1a3674eb
commit
c8ccd028a7
@ -610,6 +610,8 @@ AC_CHECK_FUNCS(
|
||||
sigaction \
|
||||
socketpair \
|
||||
statvfs \
|
||||
strncasecmp \
|
||||
strcasecmp \
|
||||
strlcat \
|
||||
strlcpy \
|
||||
strnlen \
|
||||
|
@ -13,9 +13,20 @@
|
||||
|
||||
/* ===== String compatibility */
|
||||
#ifdef _WIN32
|
||||
/* Windows names string functions differently from most other platforms. */
|
||||
#define strncasecmp _strnicmp
|
||||
#define strcasecmp _stricmp
|
||||
/* Windows doesn't have str(n)casecmp, but mingw defines it: only define it
|
||||
* ourselves if it's missing. */
|
||||
#ifndef HAVE_STRNCASECMP
|
||||
static inline int strncasecmp(const char *a, const char *b, size_t n);
|
||||
static inline int strncasecmp(const char *a, const char *b, size_t n) {
|
||||
return strncmpi(a,b);
|
||||
}
|
||||
#endif
|
||||
#ifndef HAVE_STRCASECMP
|
||||
static inline int strcasecmp(const char *a, const char *b, size_t n);
|
||||
static inline int strcasecmp(const char *a, const char *b, size_t n) {
|
||||
return strcmpi(a,b);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined __APPLE__
|
||||
|
Loading…
Reference in New Issue
Block a user