Anything to improve? From 05bc4cbc93f5f9942fc28a578dc1afa68d69daa2 Mon Sep 17 00:00:00 2001 From: Mateusz Mikula <mati...@gmail.com> Date: Sun, 4 Jun 2017 11:33:22 +0200 Subject: [PATCH] cast ua_wcschr and ua_wcsrchr returns when WSTR_ALIGNED is true
Clang doesn't allow implicit conversion form "const wchar_t *" to "PUWSTR_C" (aka wchar_t *) Signed-off-by: Mateusz Mikula <mati...@gmail.com> --- mingw-w64-headers/include/stralign.h | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/mingw-w64-headers/include/stralign.h b/mingw-w64-headers/include/stralign.h index 9b5637d6..4b157c27 100644 --- a/mingw-w64-headers/include/stralign.h +++ b/mingw-w64-headers/include/stralign.h @@ -117,12 +117,23 @@ extern "C" { size_t ua_wcslen(PCUWSTR String); #ifndef __CRT__NO_INLINE + union { + wchar_t *wcharPointer; + const wchar_t *constWcharPointer; + } cast; + __CRT_INLINE PUWSTR_C ua_wcschr(PCUWSTR String,WCHAR Character) { - if(WSTR_ALIGNED(String)) return wcschr((PCWSTR)String,Character); + if(WSTR_ALIGNED(String)) { + cast.constWcharPointer = wcschr((PCWSTR)String,Character); + return cast.wcharPointer; + } return (PUWSTR_C)uaw_wcschr(String,Character); } __CRT_INLINE PUWSTR_C ua_wcsrchr(PCUWSTR String,WCHAR Character) { - if(WSTR_ALIGNED(String)) return wcsrchr((PCWSTR)String,Character); + if(WSTR_ALIGNED(String)) { + cast.constWcharPointer = wcsrchr((PCWSTR)String,Character); + return cast.wcharPointer; + } return (PUWSTR_C)uaw_wcsrchr(String,Character); } #if defined(__cplusplus) && defined(_WConst_Return) -- 2.12.1 ------ Original Message ------ Subject: Re: [Mingw-w64-public] [PATCH] stralign: cast ua_wcschr and ua_wcsrchr returns to wchar_t * Date: Thu, 6 Apr 2017 11:48:24 +0200 To: Mingw-w64-public From: Kai Tietz > A cast via union looks like this: > type1 *foo(const type1 *my_const_ptr) > { > union { > type1 *t1; > const type1 *ct1; > } v; > v.ct1 = my_const_ptr; > return v.t1; > } > > The advantage of such a pattern is that no type conversion > errors/warnings are shown. So for casting from const to none-const, > this variant is to be preferred. (and it works for C, and C++!!!) > > Cheers, > Kai > > 2017-04-05 15:51 GMT+02:00 Mateusz Mikuła <mati...@gmail.com>: >>> Hmm, using here "wchar_t *" as cast looks wrong. Actually we should >>> use anyway PUWSTR_C instead. >> I noticed it a bit too late and sent another patch casting to PUWSTR_C. >>> Nevertheless we can have here a const/none-const conversion (means >>> const specifiers for C-runtime function isn't regarded right?). I >>> would suggest to introduce a union-cast instead to avoid further >>> warnings instead. >> Conversion from const pointer to normal pointer is definitely unsafe but >> that's probably what GCC just did. >> I'm unsure what you mean by "union-cast" but you can commit your fix. >> >> >> ------------------------------------------------------------------------------ >> 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 >> Mingw-w64-public@lists.sourceforge.net >> 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 > Mingw-w64-public@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
From 05bc4cbc93f5f9942fc28a578dc1afa68d69daa2 Mon Sep 17 00:00:00 2001 From: Mateusz Mikula <mati...@gmail.com> Date: Sun, 4 Jun 2017 11:33:22 +0200 Subject: [PATCH] cast ua_wcschr and ua_wcsrchr returns when WSTR_ALIGNED is true Clang doesn't allow implicit conversion form "const wchar_t *" to "PUWSTR_C" (aka wchar_t *) Signed-off-by: Mateusz Mikula <mati...@gmail.com> --- mingw-w64-headers/include/stralign.h | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/mingw-w64-headers/include/stralign.h b/mingw-w64-headers/include/stralign.h index 9b5637d6..4b157c27 100644 --- a/mingw-w64-headers/include/stralign.h +++ b/mingw-w64-headers/include/stralign.h @@ -117,12 +117,23 @@ extern "C" { size_t ua_wcslen(PCUWSTR String); #ifndef __CRT__NO_INLINE + union { + wchar_t *wcharPointer; + const wchar_t *constWcharPointer; + } cast; + __CRT_INLINE PUWSTR_C ua_wcschr(PCUWSTR String,WCHAR Character) { - if(WSTR_ALIGNED(String)) return wcschr((PCWSTR)String,Character); + if(WSTR_ALIGNED(String)) { + cast.constWcharPointer = wcschr((PCWSTR)String,Character); + return cast.wcharPointer; + } return (PUWSTR_C)uaw_wcschr(String,Character); } __CRT_INLINE PUWSTR_C ua_wcsrchr(PCUWSTR String,WCHAR Character) { - if(WSTR_ALIGNED(String)) return wcsrchr((PCWSTR)String,Character); + if(WSTR_ALIGNED(String)) { + cast.constWcharPointer = wcsrchr((PCWSTR)String,Character); + return cast.wcharPointer; + } return (PUWSTR_C)uaw_wcsrchr(String,Character); } #if defined(__cplusplus) && defined(_WConst_Return) -- 2.12.1
signature.asc
Description: OpenPGP digital signature
------------------------------------------------------------------------------ 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 Mingw-w64-public@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mingw-w64-public