I just tested LH_Mouse's patch and it seems to work fine, so I am OK with
using it instead of mine.

However, that patch seems like it could be wrong too, since when strsafe.h
is used to compile the library, all the library functions will have
__inline in their declarations even though we are compiling them with the
intent to make normal non-inline functions in a static library.

Looking back at the original header, there are things that confuse me.  The
__STRSAFE_NO_INLINE macro should probably be renamed to __STRSAFE_NO_IMPL,
because the main thing it does is to control whether the header file
provides definitions of its functions or not.  The case I described above
is a case where you want function definitions but you don't want __inline,
so the naming of __STRSAFE_NO_INLINE is confusing.

It also seems like the function prototypes should not depend on
__CRT_STRSAFE_IMPL (as they do currently) or on __STRSAFE_NO_IMPL (as they
do in LH_Mouse's patch).  They should depend on some global option that
says whether the functions are inline functions defined in the header or
whether they come from one of the MinGW libraries (the default).  Would
__CRT__NO_INLINE be the global option I'm looking for?

If someone wants to sort out the logic that would be cool, or just merge in
either my patch or LH_Mouse's, since they both fix a bunch of compiler
warnings.

--David


On Sun, Apr 2, 2017 at 11:12 AM, Liu Hao <[email protected]> wrote:
>
> I'm afraid it isn't the correct fix. If the compiler says it is declared
> and not defined, then it is declared and not defined.
>
> The inline definitions are provided when `__STRSAFE__NO_INLINE` is not
> defined (see line 159 and 873), that is, when `__CRT__NO_INLINE` is defined
> and `__CRT_STRSAFE_IMPL` is not defined (see line 15). However, we fail to
> keep the consistency between these declarations and definitions. These
> functions are declared as inline only when `__CRT_STRSAFE_IMPL` is not
> defined. If only `__CRT__NO_INLINE` is defined, these functions would be
> declared as inline while their inline definitions will not be provided.
> Hence the warning.
>
> The proper way to fix this problem is checking the same condition on lines
> 84, 94 and lines 159, 175, 873, etc. I have attached a new patch for this
> issue. Please test.
>
> --
> Best regards,
> LH_Mouse
>
>
>
>
>
> From f2f652c023ad1320f69bd7d5f0d5c47376056869 <(737)%20605-6869> Mon Sep
> 17 00:00:00 2001
> From: Liu Hao <[email protected]>
> Date: Mon, 3 Apr 2017 02:00:15 +0800
> Subject: [PATCH] include/strsafe.h: Fix warning 'inline function declared
> but
>  never defined'.
>
> Reference: https://sourceforge.net/p/mingw-w64/mailman/message/35763431/
> Signed-off-by: Liu Hao <[email protected]>
> ---
>  mingw-w64-headers/include/strsafe.h | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/mingw-w64-headers/include/strsafe.h
> b/mingw-w64-headers/include/strsafe.h
> index 36c7796c..66b5336f 100644
> --- a/mingw-w64-headers/include/strsafe.h
> +++ b/mingw-w64-headers/include/strsafe.h
> @@ -81,7 +81,7 @@ typedef __LONG32 HRESULT;
>  #endif
>  #endif
>
> -#ifndef __CRT_STRSAFE_IMPL
> +#ifndef __STRSAFE__NO_INLINE
>  #define STRSAFEAPI _STRSAFE_EXTERN_C __inline HRESULT WINAPI
>  /* Variadic functions can't be __stdcall.  */
>  #define STRSAFEAPIV _STRSAFE_EXTERN_C __inline HRESULT
> @@ -91,7 +91,7 @@ typedef __LONG32 HRESULT;
>  #define STRSAFEAPIV HRESULT
>  #endif
>
> -#ifndef __CRT_STRSAFE_IMPL
> +#ifndef __STRSAFE__NO_INLINE
>  #define STRSAFE_INLINE_API _STRSAFE_EXTERN_C __CRT_INLINE HRESULT WINAPI
>  #else
>  #define STRSAFE_INLINE_API HRESULT WINAPI
> --
> 2.12.1
>
>
>
> ------------------------------------------------------------
> ------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> Mingw-w64-public mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
>
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to