On Thu, Sep 12, 2013 at 8:20 PM, Jeff King <peff@xxxxxxxx> wrote: >> > I wonder if GCC has changed it's behaviour to more closely match C99. >> > Clang as a compatibility article about this sort of issue: >> > >> > http://clang.llvm.org/compatibility.html#inline >> >> Interesting. The ways the page suggests as fixes are >> >> - change it to a "statis inline"; >> - remove "inline" from the definition; >> - provide an external (non-inline) def somewhere else; >> - compile with gnu899 dialect. > > Right, option 3 seems perfectly reasonable to me, as we must be prepared > to cope with a decision not to inline the function, and there has to be > _some_ linked implementation. But shouldn't libc be providing an > external, linkable strcasecmp in this case? MinGW / GCC is not linking against libc, but against MSVCRT, Visual Studio's C runtime. And in fact MSVCRT has a non-inline implementation of a "case-insensitive string comparison for up to the first n characters"; it just happens to be called "_strnicmp", not "strncasecmp". Which is why I still think just having a "#define strncasecmp _strnicmp" is the most elegant solution to the problem. And that's exactly what defining __NO_INLINE__ does. Granted, defining __NO_INLINE__ in the scope of string.h will also add a "#define strcasecmp _stricmp"; but despite it's name, defining __NO_INLINE__ does not imply a performance hit due to functions not being inlined because it's just the "strncasecmp" wrapper around "_strnicmp" that's being inlined, not "_strnicmp" itself. -- Sebastian Schuberth -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html