I wonder if adding _MINGW_ASM_CALL will or will not affect applications which 
want to define/declare their own str[n]casecmp function? I don't know how such 
renames interact with redeclarations.
________________________________
From: Pali Rohár <[email protected]>
Sent: Thursday, December 18, 2025 7:58 PM
To: Kirill Makurin <[email protected]>
Cc: mingw-w64-public <[email protected]>
Subject: Re: Remove inline definitions of str[n]casecmp from string.h

On Thursday 18 December 2025 06:05:00 Kirill Makurin wrote:
> This patch removes inline and macro definitions of str[n]casecmp from 
> string.h. Both str[n]casecmp already defined as aliases for CRT's _str[n]icmp 
> in crt-aliases.def.in.
>
> In general, I would like to look more through mingw-w64's header files and 
> remove such definitions wherever possible. I think we should avoid providing 
> inline definitions for functions which are not provided by CRTs, since 
> applications may want to define functions with these names (even if those are 
> POSIX names, since Windows is not POSIX it should be allowed).
>
> Results of GitHub CI for this single patch are here[1].
>
> - Kirill Makurin
>
> [1] https://github.com/maiddaisuki/mingw-w64/actions/runs/20323047405

> From 4559b4cbc92f59111cb8a08182b8d2b57f059654 Mon Sep 17 00:00:00 2001
> From: Kirill Makurin <[email protected]>
> Date: Thu, 18 Dec 2025 10:32:03 +0900
> Subject: [PATCH 1/9] crt: remove inline definitions of str[n]casecmp from
>  string.h
>
> mingw-w64 already defines str[n]casecamp as an alias for
> _str[n]icmp in crt-aliases.def.in. There is no need to define
> them as inline wrappers or override them through macros.
>
> Removing inline definition from string.h also allows other
> packages to define functions named str[n]casecmp.
>
> Signed-off-by: Kirill Makurin <[email protected]>
> ---
>  mingw-w64-headers/crt/string.h | 7 -------
>  1 file changed, 7 deletions(-)
>
> diff --git a/mingw-w64-headers/crt/string.h b/mingw-w64-headers/crt/string.h
> index 1832e38ed..e947930ff 100644
> --- a/mingw-w64-headers/crt/string.h
> +++ b/mingw-w64-headers/crt/string.h
> @@ -126,13 +126,6 @@ extern "C" {
>    int __cdecl strnicmp(const char *_Str1,const char *_Str,size_t _MaxCount) 
> __MINGW_ATTRIB_DEPRECATED_MSVC2005;
>    int __cdecl strncasecmp (const char *, const char *, size_t);
>    int __cdecl strcasecmp (const char *, const char *);
> -#ifndef __CRT__NO_INLINE
> -  __CRT_INLINE int __cdecl strncasecmp (const char *__sz1, const char 
> *__sz2, size_t __sizeMaxCompare) { return _strnicmp (__sz1, __sz2, 
> __sizeMaxCompare); }
> -  __CRT_INLINE int __cdecl strcasecmp (const char *__sz1, const char *__sz2) 
> { return _stricmp (__sz1, __sz2); }
> -#else
> -#define strncasecmp _strnicmp
> -#define strcasecmp _stricmp
> -#endif /* !__CRT__NO_INLINE */

Together with removing those inline functions and macro redefinitions,
it would be good to add __MINGW_ASM_CALL for strncasecmp and strcasecmp
to have redirects to _strnicmp and _stricmp like it was before this
change.

Otherwise this change cause that PE IMPORT TABLE generated by GNU LD
would have duplicate entries when both strcasecmp and _stricmp are used
by applications.

>    char *__cdecl strnset(char *_Str,int _Val,size_t _MaxCount) 
> __MINGW_ATTRIB_DEPRECATED_MSVC2005;
>    char *__cdecl strrev(char *_Str) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
>    char *__cdecl strset(char *_Str,int _Val) 
> __MINGW_ATTRIB_DEPRECATED_MSVC2005;
> --
> 2.51.0.windows.1
>

_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to